以前別記事にてLinuxのEC2にSSH接続する方法を解説しましたが、その記事ではEC2がパブリックサブネット上に存在する公開サーバである前提でした。
残念ながらプライベートサブネット上のEC2には外部から直接SSH接続することはできません。一旦パブリックEC2に接続し、パブリックEC2からプライベートEC2に接続する必要があります。(この時経由地となるパブリックEC2は踏み台サーバと呼ばれます)
今回は公開サーバ(Linux)を踏み台としてプライベートサブネット上にある非公開サーバ(Linux)に接続する方法を解説します。
- 踏み台サーバ経由でプライベートサブネット上のEC2にアクセスする方法(Linux)
前提
前準備として以下は完了している状態とします。
AWS
- パブリックおよびプライベートサブネット上のEC2(Linux)の作成、起動
- 各EC2のキーペアの作成、割り当て、プライベートキーファイル(pem)のダウンロード
キーペアは各EC2で同じものでよいです - セキュリティグループのインバウンドでSSHを許可(EC2二つとも)
(インスタンス生成時に※ソースは絞れるなら絞ってもOK - パブリック側のEC2にはパブリックIPv4アドレスを割り当てる
(インスタンス生成時に『パブリックIPの自動割り当て』を有効化)
踏み台サーバ経由でプライベートEC2に接続する(Linux)
本記事ではTeraTermを使用してローカルPCから接続を行います。
そもそもの概要(興味ない人は飛ばしておk)
EC2にリモート接続する場合、クライアント側(接続する側)がプライベートキーファイル(pem)を持っている必要があります。プライベートキーファイルを使って自分がサーバ(接続される側)に繋いで良い端末であることを証明するわけです。
これは、踏み台サーバから非公開サーバに接続するときも同様です。この際にも踏み台サーバが非公開サーバのプライベートキーファイル(pem)を持っている必要があります。
なので、事前にローカルPCから踏み台サーバに非公開サーバのプライベートキーファイル(pem)を渡してあげる必要があります。
全体でみると以下の通りです。
踏み台サーバ経由で接続する手順
1.ローカルPCから踏み台サーバにSSHで接続
まずはローカルPCから踏み台サーバ(公開サーバ)にSSH接続を行います。接続方法は関連記事を参照してください。
2.踏み台サーバに非公開サーバ用のプライベートキーファイル(pem)を保存
ローカルPC⇔踏み台サーバ間のSSH接続を利用して、踏み台サーバ上にプライベートキーファイルを保存します。
保存方法は以下の2種類あります。
- 踏み台サーバ上でテキストエディタを開き直接内容を張り付け、保存
- 踏み台サーバにファイル転送(scpコマンド)
どちらでも良いですが、ここでは一つ目のテキストエディタの手順で実施します。なぜなら筆者はscpコマンドがよくわかんないからです。(後でまた別の記事にできれば・・・)
- SSH接続したTeraTerm上にて nano 保存するキーファイル名 と入力しファイルを開きます。テキストエディタはvim等でも構いません。
- 保存したpemファイルの内容をローカルPC上でクリップボードにすべてコピーし、TeraTermの編集画面に貼り付けて保存します。
- 作成したキーファイルのアクセス許可を変更します。
他のユーザが読み取れないように設定することが公式より推奨されています。コマンド: chmod 400 作成したキーファイル名
3.踏み台サーバから非公開サーバにSSH接続
踏み台サーバから非公開にSSHで接続します。コマンドは現在踏み台サーバに接続しているTeraTerm上で入力します。
コマンド:
ssh 接続ユーザ名@非公開サーバのプライベートIPアドレス -i 非公開サーバ用プライベートキーファイル(pem)
始めて接続する場合は以下のメッセージが表示されます。
The authenticity of host 'xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx)' can't be established.
これは知らない端末に繋ごうとしてるけどOK?と聞かれています。yesと入力してください。
上記で非公開サーバに接続できました。
入力欄のipアドレスが非公開サーバの物になっている。あとはこのままTeraTerm上でコマンドを実行すればOKです。
ちなみに、ssh接続を終了したい場合はexitコマンドを実行してください。
まとめ
ここでは踏み台サーバを経由して非公開サーバにSSH接続する方法を解説しました。
ただ、今回の構成では非公開サーバが直接外部とのやり取りが発生するコマンドは実行できない点に注意が必要です。(プライベートサブネット上のEC2は直接インターネットとのやり取りはできないため)
外部とやり取りさせたい場合はNATゲートウェイの設置が必要となります。
勉強中の身ですので、誤りや不備等ありましたらご指摘いただけますと幸いです。