sshで踏み台サーバを通して接続するProxyCommandの設定 2016/06/07
gateway
というホストを踏み台サーバとして、appserver
というホストにsshコマンド一発で多段接続したい場合の設定例。
Host gateway
IdentityFile ~/.ssh/id_rsa_for_gateway
Host appserver
# ProxyCommand はこの4行のうちのどれか
#ProxyCommand nohup ssh gateway nc %h %p
#ProxyCommand nohup ssh gateway -W %h:%p
#ProxyCommand ssh -W %h:%p gateway
#ProxyCommand ssh -q -W %h:%p gateway
IdentityFile ~/.ssh/id_rsa_for_appserver
sshコマンドを叩くローカルの ~/.ssh/config
に上記のように書く。
この記述例の中に ProxyCommand
が4つあり、このうちのどれかを書くとどうやら多段接続できるようだが、どれが一番正しいのかはよくわからない。
nohup
つけると接続開始時に redirecting stderr to stdout
と表示されてしまう環境と表示されない環境があった。
2>/dev/null
をつけると表示されなくなるのだが、いずれにしても
ssh appserver hogehogecommand
みたいにリモートでコマンドを実行したときのエラー出力が標準出力に混ざってしまい、シェルスクリプトだとかで標準出力と標準エラー出力を区別して処理したい場合に支障が出る。
nohup
をつけずに -q
もつけないと、切断時に Killed by signal 1.
と表示されてしまう環境と表示されない環境があった。
これもやはり 2>/dev/null
をつけるというアドバイスをネット上で見つけるが、これだとリモートでコマンドを実行したときのエラー出力も表示されなくなってしまう。
nohup
つけずに -q
をつけないパターンが、余計な警告メッセージが出ず、リモートで実行するコマンドの標準出力と標準エラー出力もちゃんとそのまま出力してくれるので、よさそうではある。
が、正しい方法はよくわからない。