2016年11月14日月曜日

root が使用できないので ssh と sudo でファイル転送したい


root が使用できない環境で、root がオーナのファイルを転送したい場合、よくやるのが以下の手順です。

  1. 一時的に /tmp などにファイルを scp する
  2. ssh で sudo cp する
  3. 上記1で/tmp に置いたファイルを削除する

これは、面倒です。。

以下のように ssh に標準入力経由でローカルファイルのデータを渡し、
sudo で root 権限を使用して dd コマンドで処理すると、
ローカルのファイルを1回でリモートサーバにファイル転送できます。

ssh user@server "sudo dd of=/etc/hosts" < my_hosts

リモートサーバのファイルをローカルに転送したい場合は、以下のとおり。

ssh user@server "sudo dd if=/etc/hosts" > hosts.backup

dd のかわりに、tar コマンドを使用して、リモートサーバのファイルを、直接ローカルにアーカイブすることもできます。

ssh user@server "sudo tar cvfz - /etc" > etc.tgz