sshで踏み台サーバを通して接続するProxyCommandの設定

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 をつけないパターンが、余計な警告メッセージが出ず、リモートで実行するコマンドの標準出力と標準エラー出力もちゃんとそのまま出力してくれるので、よさそうではある。

が、正しい方法はよくわからない。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。