rootでsshできないホストへファイルを転送する

手動でアーカイブ作って、転送してrootにsuして展開、、ってのもありなんだけど面倒。なんとかできないか考えてみました。

条件

hostAとhostBとの間でディレクトリ構造ごとファイルをコピーする。AとBにあそれぞれ"hoge"というアカウントがあって、相互にsshは可能。
AもBもrootでのsshは許されていない。"hoge"アカウントはno passwordでsudoが可能。

こうやってみた

A上でtarを標準出力に出して、パイプでsshに流し、sudoで再度tar展開。こんな感じ。

# tar -cvf - ./* | ssh hoge@B -i /home/hoge/.ssh/id_rsa 'sudo tar -C /path/to -xvf -'

パーミションやownerまでバッチリ。ownerやgroupはidで転送するのでAとB間で同じ数字である必要はあります。