理想未来ってなんやねん

娘可愛い。お父さん頑張る。

ssh+パイプを使ったRemote to Remoteコピー

sshを使って異なるサーバー間でコピーを行いたい時のメモ

前提条件

以下の環境を想定しています。

  1. host A、host B、host CはいずれもUNIX系OSでOpenSSHが使用でき、host Cからhost Aへのログイン、host Cからhost Bへのログインはできる。
  2. host Aとhost Bの間での信頼関係はない。
  3. トラフィックはhost A→host C→host Bのように流れて良い。

図にすると下記の通りです。


例1)1つのファイルをコピーする

host Aの.bash_profileをhost Bに.bash_profileAという名前でコピーするという場合は次のように行います。

$ ssh 192.168.0.1 'cat ~/.bash_profile' | ssh 192.168.0.2 'cat > ~/.bash_profileA'

例2)複数のファイルをtarで纏めて、host Bに送る

host Aの.vimをtar.gzで固めて、host Bに_vim.tar.gzという名前でコピーする場合は次のように行います。

$ ssh 192.168.0.1 'tar czf - .vim' | ssh 192.168.0.2 'cat > _vim.tar.gz'

例3)複数のファイルをtarで纏めて、host Bで解凍する

host Aの.vimをtar.gzで固めて、host Bに.vimという名前でコピーする場合は次のように行います。

$ ssh 192.168.0.1 'tar czf - .vim' | ssh 192.168.0.2 'mkdir ~/hostA_vim; cd ~/hostA_vim; tar xzf -'

ssh+パイプでもデータが渡せることを知っておけば応用は効くので非常に便利です。
以上、ご参考になれば幸いです。