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

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

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

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

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.9.2009

実行例

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