7839

雑草魂エンジニアブログ

【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 の踏み台サーバーを経由して、アプリケーションサーバーにアクセスする。

f:id:serip39:20201219000241p:plain

接続方法

基本的には、.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 接続について整理してみた。

それでは、ステキな開発ライフを。