ssh+パイプを使ったRemote to Remoteコピー
sshを使って異なるサーバー間でコピーを行いたい時のメモ
前提条件
以下の環境を想定しています。
- host A、host B、host CはいずれもUNIX系OSでOpenSSHが使用でき、host Cからhost Aへのログイン、host Cからhost Bへのログインはできる。
- host Aとhost Bの間での信頼関係はない。
- トラフィックは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'