リモートのLinuxマシンとsshコマンドでファイル転送する方法

リモートのLinuxマシンとsshコマンドでファイル転送する方法

リモートのLinuxマシンとファイルの送受信するときに、最も一般的な方法はSSHと同じ仕組みで安全にファイルを転送できるscpコマンドですが、scpコマンドが利用できない環境でもsshコマンドでファイル転送する方法があります。

そこでここでは、sshコマンドとtarやcatコマンド、リダイレクトを組み合わせて、リモートのLinuxマシンとファイルの送受信する方法を紹介します。

実行例

ローカルマシンで「/home」をアーカイブして、リモートマシンにバックアップするには(tarコマンドの「-」は、ファイルに出力するのではなく標準出力に出力するという意味です)

# tar zcf - -C / home | ssh user@remote-machine 'cat > local-machine-home.tgz'

ローカルマシンで「/home」をアーカイブして、リモートマシンの「/tmp」で展開するには

# tar zcf - -C / home | ssh user@remote-machine 'tar zxvf - -C /tmp'

リモートマシンで「/home」をアーカイブして、ローカルマシンの「/tmp」で展開するには

# ssh user@remote-machine 'tar zcf - -C / home' | tar zxvf - -C /tmp

ローカルマシンの大容量アーカイブファイルを、リモートマシンの「/tmp」で展開するには

# ssh user@remote-machine 'tar zxvf - -C /tmp' < big-archive.tgz

リモートマシンの大容量アーカイブファイルを、ローカルマシンのカレントディレクトリで展開するには

# ssh user@remote-machine 'cat /tmp/big-archive.tgz' | tar zxvf -

あとがき

SSHコマンドでは、ローカルホストの標準出力をリモートホストの標準入力で受け取ったり、リモートホストの標準出力をローカルホストの標準入力で受け取ることができるというところがポイントです。上で紹介した以外でも、いろいろ応用できそうです。