![ssh リモート コマンド fu](https://rvso.com/image/488038/ssh%20%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%20fu.png)
ファイアウォールの背後からリモート バックアップを実行しようとしています。これを crontab で呼び出される独自のスクリプトに分割することはまったく問題ありませんが、それでは面白くありません。私が実行しようとしていることは次のとおりです。
pg_dump -U my_user my_database | ssh me@myserver "> backup.sql"
postgresql データベースをバックアップし (すべてを stdout にダンプ)、それを単に backup.sql に配置するリモート ssh コマンドにリダイレクトします。
残念ながら、リモート ボックスには空の「backup.sql」しか表示されません。リダイレクトは得意ではないので、ヒントがあれば教えてください。よろしくお願いします。
答え1
試す
pg_dump -U my_user my_database | ssh me@myserver "cat > backup.sql"
答え2
さらに良いのは、SSH する前に圧縮することです。
pg_dump -U my_user my_database | gzip -c | ssh me@myserver "cat > backup.sql.gz"
これにより、SQL ダンプで大量の帯域幅が節約されます。
私は実際、その逆のことをしています。バックアップ サーバーをバックアップ対象のサーバーにログインさせます。つまり、(非常に厳格なセキュリティを持つバックアップ サーバー以外の) いずれかのサーバーがルート レベルで侵害されたとしても、バックアップ サーバー、つまり他のすべてのサーバーは、デフォルトでは侵害されません。
したがって、SQL ダンプをリモートで実行するためのコマンドは少し異なります。
ssh <server> "pg_dump -U <user> <database> | gzip -c" > /backups/sqlbackup.sql.gz
引用符の位置には特に注意してください。引用符は、リモート側で実行される内容とローカルで実行される内容を定義します。