SSH越しのファイル操作まとめ

サーバー間でファイルをやり取りしたい場合にいつもコマンドを検索しなおしてしまうのでssh越しにファイルをコピーするコマンドをまとめてみました。

また、この記事を書いている途中に同様の内容をまとめているブログを見つけたのでリンクを貼っておきます。

前準備

キーファイルの権限変更

コピー後は権限を設定し直しておく

$ chmod 600 keyfile.pem
パスワード無しのキーファイルを作成しておく

ここで紹介するコマンドを使用するシェルをcronに登録する場合はパスフレーズ無しのキーファイルを用意しておく必要があります。

$ openssl rsa -in keyfile.pem > keyfile-nopass.pem
Enter pass phrase for keyfile.pem:
writing RSA key

cronで使用する場合は、以下に紹介するコマンドのkeyfileをkeyfile-nopass.pemに置き換えてください。
各コマンドの確認は、ubuntu10.04で行っています。

scp

リーモートのファイルをローカルにコピー

$ scp -i keyfile.pem root@192.168.1.1:/path/to/source.tar.gz .

ローカルのファイルをリモートにコピー

$ scp -i keyfile.pem /path/to/source.tar.gz root@192.168.1.2:/destination/dir

tar

rsyncが入っていない場合にディレクトリごとコピーする場合はtarも使えます。

ローカルのディレクトリをリモートに出力

$ tar zcvf - /some/file | ssh -i keyfile.pem root@192.168.1.1 "cat > /destination/backup.tar.gz"

生成したtarボールをローカルに復元

$ ssh -i keyfile.pem root@192.168.1.1 "cat /destination/backup.tar.gz" | tar zxvf -

こちらも参考: http://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/

コピー先でそのまま展開する場合

$ tar -cf - /some/file | ssh -i keyfile.pem root@192.168.1.1 tar -xf - -C /destination

rsync

コピー先が何も無いときはtarの方がrsyncよりも早いので、初期コピーはtarの方が有利ですが、2つのディレクトリ間を同期し続ける場合はrsyncを使います。

$ rsync -ave "ssh -i keyfile.pem" --delete root@192.168.1.2:/path/to/source /destination/dir