【AWS】踏み台サーバを利用した多段sshを構築しVScodeで接続するまで
多段sshでサーバーを構築することになったので作業がてらメモ。尚、プライベートサブネット内のEC2からの戻りトラフィックを有効にしたい場合、下記構成にプラスして、NATゲートウェイをパブリックサブネット内におき、プライベートサブネットへのルーティングを設定しないと行けないので追加作業が必要です。(このブログでは書いていませんが)
イメージ図
ネットワークの設定
VPCの作成
後ほどDNSからホスト名を割り当てられる様、DNSホスト名を有効化する。
サブネットの作成
- 先ほどのVPC空間に割り当てられたアドレス範囲内で、public subnetとprivate subnetの2つのサブネットを作成します。
- 下記キャプチャはpublic subnetの例、先ほど指定したVPCのアドレス範囲(172.31.0.0 ~ 172.31.255.255)の内、172.31.10.0 ~ 172.31.10.255をpublic subnetに分割している。
Internet Gatewayの作成
Route Tableの作成
private route table(デフォルトで作成されたルートテーブル)は分かりやすいように名前をつけておく。
public用の作成したルートテーブルには、先ほど作成したインターネットゲートウェイへのルートを追加する。
サブネットの関連付けで[編集]を押下し、先ほど作成したpublic subnetを追加する。
セキュリティグループの編集
- デフォルトで作成されたセキュリティグループは「同一セキュリティグループ内の制限なしアクセス」が定義されているだけなので、インバウンドルールを編集する。
尚、これとは別にprivateサーバー用のセキュリティグループも用意する。
EC2作成
踏み台サーバー作成
(今回OSはubuntu 20.04.LTSで作成)
先ほど作成したVPC領域と、public subnetを指定し、パブリックIPアドレスの自動割り当てを有効化する。
このインスタンスにはプライベートIPアドレスも指定する。先ほど指定したアドレスの範囲から指定(指定しなければ自動的に割り当てもされる)
尚、セキュリティグループの設定は先ほど作成した既存のもの(public用)を指定する。
privateサーバーの作成
先ほどのpublicサーバーと殆ど同じだが、自動割り当てパブリックIPを無効化
することを忘れずに(仮にIPアドレスが割り当てられても外部からは繋がらない)。尚、割り当てるサブネットやセキュリティグループもprivate用にする。間違えてpublic用にしないように注意
踏み台サーバーからプライベートサーバーにsshアクセス
まず、以下のコマンドで踏み台サーバーへアクセスできることを確認
ssh -i {秘密鍵} {ユーザー名}@{パブリックIPv4アドレス}
次に以下のコマンドでプライベートサーバーへ外部インターネットから一気にログインできることを確認
ssh -o ProxyCommand='ssh -i {秘密鍵} {ユーザー名}@{踏み台サーバーパブリックIPv4アドレス} -W {プライベートサーバーのローカルIPアドレス}:22' -i {秘密鍵} {ユーザー名}@{プライベートサーバーのローカルIPアドレス}
同じubuntuマシンなので分かりづらいですが、先ほどの踏み台サーバーとは異なるローカルIPアドレスである事が分かります。
次回以降のログインを楽にするために~/.ssh/config
に以下のように追記します。
Host {publicのホスト名} HostName {踏み台サーバーパブリックIPv4アドレス} Port 22 User {ユーザー名} IdentityFile {秘密鍵} ForwardAgent yes Host {privateのホスト名} HostName {プライベートサーバーのローカルIPアドレス} Port 22 User {ユーザー名} IdentityFile {秘密鍵} ProxyCommand ssh -W %h:%p {publicのホスト名}
そうすれば次回以降ssh {privateのホスト名}
で一発ログインできます。楽だし、踏み台サーバーに秘密鍵を置いたりする必要もなく安心です。
VSCode で接続
以前の記事のVSCodeで編集
を参照