scpコマンド以外でリモートマシンとファイルを送受信する

リモートマシンとのファイルの送受信で便利なscpコマンドは、 ローカルマシンとリモートマシンの双方にscpコマンドが入っていないと利用できないようです。

そこで、そんなときの備えて「ssh」コマンドと、「tar」や「cat」コマンド、リダイレクトを組み合わせて、リモートホストとの間でファイルを送受信する方法を紹介します。

動作環境

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

cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

使用例

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

スポンサーリンク