ディレクトリの転送

サーバAの /usr/local/apache2/htdocs 以下を サーバBの同じ位置へ転送したい。
ところがサーバAとサーバB間は通信ができないが、手元の端末Xからはどちらへもsshが通るとする。

そうすると通常考えられる手段としては

  • Aでtarballを作成して、Xへ転送、さらにBへ転送して展開
  • A-Xでsshトンネルを作成、そのトンネルの中にA-Bのトンネルを作ってscp,rsync

なんて感じですが、どれもこれも面倒。tarの標準出力をつかってなんとかしてみました。
こんな感じです。

$ ssh A 'cd /usr/local/apache2/htdocs ; tar -zcvpf - ./*' | ssh B 'sudo tar -C /usr/local/apache2/htdocs -zxvf -'

sshでAの目的ディレクトリをtarで標準出力へ。それをX上のパイプでBへsshで流してtarに食わせる。帯域の無駄遣いなような気もしますが、転送したり、中間ファイルを消したりとかいった手間がないので楽ちん。