ローカル端末からsshコマンドを実行して、踏み台サーバー → プライベートサーバーに接続。その後コマンドを実行する方法について記載します。
結論としては下記コマンドを実行すれば良いです。
こちらのコマンドでは、プライベートサーバーでls -l
を実行しています。
ssh -o "ConnectTimeout 5" -oProxyCommand=\
'ssh -W %h:%p 踏み台サーバーのユーザー名@踏み台サーバーのパブリックIP -i ~/.ssh/bastion.pem' \
-i ~/.ssh/private.pem プライベートサーバーのユーザー名@プライベートサーバーのプライベートIP \
"ls -l"
解説
秘密鍵、bastion.pem
と private.pem
はローカル環境にあるものを利用します。
-o "ConnectTimeout 5"
オプションは接続試行時のタイムアウト時間を設定しています。設定しないとサーバーに接続できない際に処理が終わりません。(環境による?)
今回は5秒としています。
-o
オプションのProxyCommand='踏み台サーバーの接続情報'
を使用すると自分の代わりにプライベートサーバーと通信を行うサーバー、つまりプロキシサーバー(踏み台)を設定できます。(この辺りを明確に説明している資料が見つけられないため、著者の解釈。簡単な解説は$ man ssh_config
に記載あり)
-W
オプションは転送設定を行います。proxyサーバへ接続後、全てinput/output は %h:%p へ転送されユーザからの操作はすべて%h,%pに転送されます。
また%h
はプロキシ経由で接続したいホスト、%p
はそのホストのポート番号を意味します。(解説は$ man ssh
を確認)
ProxyCommand'
の後には本来接続したいサーバーの接続情報を設定します。
最後に実行したいコマンドを"コマンド"
のかたちで設定します。