【SSH】踏み台サーバーを経由した多段SSH接続のやり方(.ssh/configの利用)
最近、サーバー運用などを勉強している。
VPC 環境を構築する時に、サブネットを多段に分割してセキュリティレベルを分け、踏み台サーバー経由でしかSSH接続できないようにする構成が多いようだ。
踏み台サーバーを経由した多段 SSH 接続で、AWS(EC2)で運営されているサーバーにアクセスしたので、備忘録として残しておく。
(通常の)SSH 接続
まずは、通常の SSH 接続方法を確認する。
$ ssh -i [秘密鍵] [ユーザー名]@[アドレス] # EC2の場合の例 $ ssh -i ~/.ssh/config.d/aws.pem ec2-user@xxx.xxx.xxx.xxx
この場合、毎回秘密鍵のパスやログインユーザー名、アドレスを思い出して、入力するのは、面倒である。そこで、.ssh/config
に設定を記載しておくことで、ホスト名のみでSSH接続ができるようにしておく。(秘密鍵は、.ssh/config.d
に入れるようにした。)
$ sudo mkdir ~/.ssh/config.d
$ sudo vim ~/.ssh/config
Host appX-server HostName xxx.xxx.xxx.xxx User ec2-user IdentityFile ~/.ssh/config.d/aws.pem StrictHostKeyChecking no IdentitiesOnly yes
このように設定しておくことで、以下のようにして SSH 接続することができる。
$ ssh appX-server
非常に便利である。
多段 SSH 接続
いよいよ本題である。
構成
まずは、簡単であるが、構成図を示す。public の踏み台サーバーを経由して、アプリケーションサーバーにアクセスする。
接続方法
基本的には、.ssh/config
に設定を書いて接続を行うが、上記に沿って、コマンドで接続する方法も記載しておく。
ProxyCommand
を使う。
$ ssh -i [(app)秘密鍵] -o ProxyCommand='ssh -i [(step)秘密鍵] -W %h:%p [(step)ユーザー名]@[(step)アドレス]' [(app)ユーザー名]@[(app)アドレス]
- -W:フォワードの設定を行う
- %h:ホスト
- %p:ポート番号
上記が置換されることで、多段 SSH 接続ができる。
また、.ssh/config
は以下の書くことができる。
Host step-server
HostName xxx.xxx.xxx.xxx
User ec2-user
IdentityFile ~/.ssh/config.d/aws.pem
StrictHostKeyChecking no
IdentitiesOnly yes
Host appX-server
HostName xxx.xxx.xxx.xxx
User ec2-user
IdentityFile ~/.ssh/config.d/application.pem
ProxyCommand ssh -W %h:%p step-server
StrictHostKeyChecking no
IdentitiesOnly yes
$ ssh appX-server
.ssh/config
なくしては、踏み台を介した SSH 接続はできないですね。
まとめ
今回は、サーバーアクセスの要である SSH 接続について整理してみた。
それでは、ステキな開発ライフを。