【初めてでも大丈夫!】踏み台サーバーを経由してwebサーバーへSSH接続<AWS EC2>

【初めてでも大丈夫!】踏み台サーバーを経由してwebサーバーへSSH接続<AWS EC2> AWS
スポンサーリンク

「多段SSH接続」のみならず、立ち上げたEC2へのSSH接続自体初めてだったので、備忘録としてまとめておきます。

前提条件が同じ人なら、手順通り進めていけばSSH接続できるはずです。



環境など前提条件

対象読者

対象読者は、あまりSSH接続したことのない、私と同じくらいの実力の方としています。
したがって、多少説明が冗長なのは「丁寧に解説している」つもりです。笑
その点ご了承ください。

環境

ローカルのスペック

  • macOS Catalina バージョン10.15.7
  • 当然、インターネットに繋がっています

踏み台サーバーのスペック

  • AWS上のEC2インスタンス
  • AMI : Amazon Linux 2 AMI (HVM), SSD Volume Type x86
  • パブリックなサブネットに配置
  • セキュリティーグループのインバウンドで、ローカルのIPアドレスを許可済。
  • Elastic IPアドレス(固定IPアドレス)を取得、アタッチ済。

アクセスしたいwebサーバーのスペック

  • AWS上のEC2インスタンス
  • AMI : Ubuntu Server 20.04 LTS (HVM), SSD Volume Type x86
  • プライベートなサブネットに配置
  • セキュリティーグループのインバウンドで、踏み台サーバーにアタッチしたセキュリティーグループからのアクセスを許可済。

EC2は立ち上げて実行中、AWSマネジメントコンソールから「キーペア」を作成、秘密鍵をダウンロード済。同じキーペアをwebサーバー、踏み台サーバー両方にアタッチしている、というところからスタートです。

もし、ただ踏み台サーバーのみにシンプルなSSH接続をするなら

ちなみに、多段SSHではなく、シンプルに踏み台サーバーに接続したいだけなら、下記3ステップでOKです。

[ローカルのterminal]

1. まず秘密鍵を移動
$ mv ~/xxxxxx.pem  ~/.ssh

2. 秘密鍵に読み書き権限を付与
$ sudo chmod 0600 ~/.ssh/xxxxxx.pem

3. その秘密鍵を使ってSSH接続
$ ssh -i ~/.ssh/xxxxxx.pem ec2-user@[踏み台サーバーのグローバルIPアドレス(EIP)]

踏み台サーバーを経由してwebサーバーへSSH接続(多段SSH接続)する手順(7ステップ)

1.秘密鍵をわかりやすい場所に移動

まずは、秘密鍵をローカルの~/.ssh/ディレクトリへ移動。cdで秘密鍵を保存した場所へ行き、mvコマンドを使いましょう。

[ローカルのterminal]
$ mv ~/xxxxxx.pem  ~/.ssh

2.~/.ssh/configを編集(山場)

これによって、ローカルから$ ssh websvと入力するだけで接続できるようにするconfig(=設定)です。

[ローカルのterminal]

$ nano ~/.ssh/config

# Web-server # これでコメントできます
Host websv # 注1
 HostName [webサーバーのプライベートIPアドレス] # 注2
 Port 22 # 注3
 IdentityFile ~/.ssh/[秘密鍵のファイル名] # 注4
 User ubuntu # 注5
 ProxyCommand ssh -W %h:%p bssv # 注6

# Bastion-server
Host bssv
 HostName [踏み台サーバーのグローバルIPアドレス(EIP)] # 注7
 Port 22
 IdentityFile ~/.ssh/[秘密鍵のファイル名]
 User ec2-user

これを設定しておけば、わざわざ踏み台サーバーに入ってからwebサーバーに入る、という手順を手動でやる必要がなくなります。秘密鍵を踏み台サーバーにコピーする必要もないのでオススメです。(踏み台サーバとwebサーバで同じキーペアを使っている場合に限ります。)

ここが山場です。全ての行にきちんと意味がありますので、出来るだけ理解して、最新の注意を払って編集しましょう。私みたいにとりあえずコピペしてトライアンドエラーで直していっても良いですが、下記ポイントを押さえておくだけでその回数がだいぶ減るかと思います。

  • 注1:「Host ◯◯」の◯◯(=ホスト名)は自由に決めて構いません。実際にSSH接続するときに何度も使用する名前なので、わかりやすくて短い名前が良いと思います。今回はwebsvにしました。(次の行のHostNameとの違いが紛らわしいですが、違う役割なので注意してください。)
  • 注2:こちらのHostNameにはIPアドレス(名前解決しているならその限りではない)を設定します。グローバルIPではなく、プライベートIPが良いようです。今回はそもそもプライベートサブネットにあるためグローバルIPがないので大丈夫でしたが、そこで詰まる方もいるようですので念の為。
  • 注3:SSH接続するならポート番号は22と相場が決まっているようです。好きな選手の背番号とか入力してはいけません。がんばれ!!タブチくん!!ファンなら問題ないかもですね。話がそれましたね。
  • 注4:ローカルに保存した秘密鍵のパスを指定してあげます。これが一致していないため接続できないこともあるあるみたいです。
  • 注5:「デフォルトのユーザー名は、インスタンスの起動時に指定した AMI によって決まります。」(AWS公式ドキュメントより)とりあえずec2-userにしとけばいいんでしょ?とか思っていたらOSの種類によっては接続できないので注意してください。
  • 注6:ローカルからwebサーバへ、一見直接アクセスできるようになるのは、このProxyCommandが自動的に実行されるためです。今回”bssv”と記載した部分は、必ず踏み台サーバーのホスト名と一致させてください。
  • 注7:こちらはグローバルIPである必要があります。(インターネット経由でアクセスするわけですから。)しかも、自動的に割り当てられるグローバルIPだと、接続する度に変わる可能性があるため、Elastic IPアドレス(固定IPアドレス)が推奨されています。ec2にアタッチしていれば料金はかかりませんし。

ただ、これだけでは接続できません。これから許可設定をしていきます。

3.編集したconfigファイルの読み書き権限を許可

まずはconfigファイルに読み書き権限を付与。

[ローカルのterminal]
$ chmod 600 ~/.ssh/config

600(= “-rw——“)が、所有者(=自分)に、読み書きの権限を与えることを表現しています。詳細についてはこちらが網羅性がありわかりやすかったです:【一通り理解】Linuxパーミッションの基本とその設定方法

これで、踏み台サーバーには入れるはずです。

4.踏み台サーバーにSSH接続

踏み台サーバでも設定があるので、テストの意味も込めて、接続します。

[ローカルのterminal]
$ ssh bssv

[以下、踏み台サーバー]

5.tcpフォワーディングの許可

ec2はデフォルトでtcpフォワーディングが許可されていないようなので、これを許可します。

[踏み台サーバー]
$ sudo cp /etc/ssh/sshd_config{,.bak}
$ sudo nano /etc/ssh/sshd_config
→「#AllowTcpForwarding yes」の"#"を削除

最初にバックアップをとって、その後、sshd_configを編集しています。

デフォルトで「#AllowTcpForwarding yes」と書いてある場所があるはずですので、そこを探し、コメントアウト”#”を外して

AllowTcpForwarding yes

とすればOKです。

また、管理者権限が必要だったので、sudoをつけています。

6.sshd再起動

最後に、

[踏み台サーバー]
$ sudo service sshd restart

とsshdを再起動したら設定完了です!

7.ローカルからwebサーバーにSSH接続(完)

まだ踏み台サーバーいるかと思いますので、Control + dでログアウトしてローカルのterminalに戻ります。

[以下再度ローカルのterminal]

さあ、接続してみましょう。

[ローカルのterminal]
$ ssh websv

おめでとうございます!

詰まったら

とりあえずエラー文で検索!で出てきますよ〜
私も参考文献のサイトのとおりやって、詰まったらググって、とやってたどり着きましたので。(何を参考にしたのか見ていったら、どこで詰まったのかわかってしまうかもですね笑)

基礎がおろそかな状態でそんなことやってたらとても時間がかかったので、この記事が同じような誰かの役に立てば幸いです。

また、他のプロトコル、例えばHTTP接続をする必要がある場合は、またひと作業必要ですので、その点ご留意ください。タイムゾーンの設定とか盲点でした。

参考文献

本文中で直接紹介したなかったサイト一覧です。
大変、助けになりました。

はるすと
はるすと

最後まで読んでくださって、ありがとうございました!

画像提供:Bethany DrouinによるPixabayからの画像

この記事を書いた人
こもれびエンジニア

自然と自由を愛するエンジニア。2021年1月に、大手製造業設計からプログラマ(Rails, AWS)へ転職。動物や自然との触れ合いや、汗を流すのが好き。

/HSP(繊細さん)/18デリケートな象/ストレングスファインダー(1分析思考/2親密性/3学習欲/4調和性/5収集心)、テニス、合気道、登山、あいだみつを、ジブリ、ワンピース、ドラゴンボール、AWS、Ruby on Rails、アイミング

twitterをフォローして、記事にならないちょっとした豆知識もチェック!
AWS
スポンサーリンク
SNSでシェア/コメントして、自分のアウトプット/発信力を高めるのにお使いください。 ↓ 各ページへジャンプ ↓
twitterをフォローして、記事にならないちょっとした豆知識もチェック!
スポンサーリンク
「そんなか」サイト

コメント

タイトルとURLをコピーしました