こんにちは、酸素です。
弊社では様々なお客様にサービスをご提供している都合上、
サービスごとにネットワークを区切ってサーバーを運用していることがあります。
ネットワークを区切ることは必然ではありますが、
とはいえ作業時には共通のサーバーからsshできると何かとうれしいことが多々あります。
(作業ログの保存や、問題切り分け時に前提条件を揃えられるなど...)
そこで必要になってくるのが、作業サーバーと対象サーバーの両方のネットワークに所属する踏み台サーバーですが、毎回踏み台サーバーへsshして、さらにもう一回sshすることが面倒くさいと感じていました。
今回は、そんな手間を省くことができるsshのオプションを知ったので共有いたします。
前提条件
まず、今回説明・検証するにあたっての環境は下図のようなものを想定して進めます。
初期状態ではサーバーAにログインしている状態で、そこから踏み台であるサーバーB経由でサーバーCにsshすることを目指します。
なお、秘密鍵はサーバーAにのみ存在し、サーバーB,Cには秘密鍵とペアになる公開鍵が設置されています。
ProxyJump
今回利用するものは、OpenSSHのProxyJumpという機能です。
ProxyJumpはOpen SSH7.3にて実装されたオプションで、-Jで指定できます。
その他、引数等は以下のように指定します
$ ssh -J "ユーザー名@踏み台サーバーのIP" "ユーザー名@最終接続先サーバーのIP"
実際に使ってみる
鍵の指定も含めて試してみます。
$ ssh -i ./id_rsa -J user01@192.168.1.20 user02@172.16.1.30
$ hostname
server-c
無事サーバーAからサーバーCにsshすることができました。
まとめ
私の最近の業務ではオンプレの環境で、踏み台サーバーを経由のsshをしておりますが、
AWS環境などでもプライベートサブネットにのみ所属するEC2にsshするケースなど様々な場面が考えられます。
なお、.ssh/configに踏み台サーバーを定義することで更に簡単にsshすることもできるそうです。
皆様もご活用いただけると幸いです!