ブログトップ 記事一覧 ログイン 無料ブログ開設

理想未来はどうなった? このページをアンテナに追加 RSSフィード

2013-06-30

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のように流れて良い。

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

f:id:pcmaster:20130628030552p:image

例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の.vimtar.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の.vimtar.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+パイプでもデータが渡せることを知っておけば応用は効くので非常に便利です。
以上、ご参考になれば幸いです。

関連記事

rsyncの負荷を抑える方法 - 理想未来はどうなった?
MacFUSE+sshfsが便利 - 理想未来はどうなった?
Bash Completionでbashの補完機能を強力にする - 理想未来はどうなった?
LinuxでSSDのTrimコマンドを有効にする方法 - 理想未来はどうなった?
mountのbindオプションでディレクトリをマウントする - 理想未来はどうなった?