sshコマンドでファイル転送を実現する
sshコマンドはサーバへの接続する際に使用しますが、ホスト名のうしろにコマンドを指定すると、ssh先のサーバでそのコマンドを実行することができます
やり方によってはsshでファイルのコピーを実行可能です。
パイプでつなげることで実現します。
ローカル側のコマンドの標準出力を、リモートホストのコマンドの標準入力で受け取ることができます。もちろん、その逆も実行可能です。
ローカル側のtarファイルをリモートサーバに転送する場合
リモートサーバの/tmp配下に転送する場合、以下のように実行します。
1 |
# tar -zc ./ディレクトリ名 | ssh kamotora@host "cat > /tmp/ディレクトリ名.tar.gz" |
送信側(ローカル側)
1 2 3 4 5 6 7 8 9 10 11 12 |
$ mkdir test $ date > test/kamo.txt $ ls -l test total 4 -rw-rw-r-- 1 kamo kamo 29 Jun 4 12:48 kamo.txt $ $ $ tar -zc ./test | ssh ユーザ名@xxxxxxx "cat > /tmp/test.tar.gz" ユーザ名@xxxxxxx's password: $ ls test $ |
↑転送完了後にlsコマンドを実行していますが、tarで固めたファイルが存在しないことがわかります。tarで圧縮したファイルをそのまま転送していますから、存在しないのは当然ですが。
受信側(リモートサーバ)
1 2 3 4 5 6 7 |
$ ls -l /tmp/ total 4 -rw-rw-r-- 1 kamo kamo 180 Jun 4 12:49 test.tar.gz $ tar -zxvf /tmp/test.tar.gz ./test/ ./test/kamo.txt $ |
なお、ローカル側、リモートサーバでユーザID、グループIDを一致させていますので、転送先でも同じユーザ、グループ名になっています。実際は一致させる必要はありません。
ローカル側のtarファイルをリモートサーバに転送して展開する場合
リモートサーバの/tmp配下に転送して展開する場合、以下のように実行します。
1 |
# tar -zc ./ディレクトリ名 | ssh kamotora@host "tar -zxf - -C /tmp" |
送信側(ローカル側)
1 2 3 |
$ tar -zc ./test | ssh ユーザ名@xxxxxxx "tar -zxf - -C /tmp" ユーザ名@xxxxxxx's password: $ |
受信側(リモートサーバ)
1 2 3 4 5 6 7 8 9 |
$ ls -lR /tmp /tmp: total 4 drwxrwxr-x 2 kamo kamo 4096 Jun 4 12:48 test /tmp/test: total 4 -rw-rw-r-- 1 kamo kamo 29 Jun 4 12:48 kamo.txt $ |
解凍された状態でファイルが配置されていることがわかります。