monoの開発ブログ

踏み台サーバで sudo して別のユーザの鍵を使う多段 ssh

sudo が絡むと単純に ProxyCommand でというわけには行かないっぽいのでメモ。

サーバにログインする場合

ログインしてサーバ上で作業したい場合です。

ssh -t bastion_server sudo -u user ssh remote_server

サーバからファイルを取ってくる場合

要するに scp 的なことがしたい場合です。base64 を噛ませているのは、ssh が LF を CRLF に変換しているっぽくてファイルが破損したためです。正直よくわかりません。

ssh -q bastion_server sudo -u user ssh -q remote_server 'cat remote_path | gzip | base64 --wrap=0' | base64 -d | gunzip > local_path

gzip は単に効率の問題なのでお好みでどうぞ。

なお、base64 コマンドは GNU coreutils のものです。OS X のように BSD のものを使う場合は -D オプションでデコードらしいです (試してない)。複数ファイルの場合は tar で固めるといけると思います。