🙂

【ターミナル】EC2にSSH出来ない時にチェックする項目

2022/10/31に公開

はじめに

タイトルのような記事は、AWSを初めて触った時にエラーが出て探すことが多いのではと思います。しかしながらどの状況下に立てられたインスタンスかで確認・対応する手順が変わってくるため、参考にした記事だけで解決しないことが多いです。

私はAWSのアソシエイト資格取得を目指す方のトレーナーをしています。しばしばMacユーザーの方から、自習でテキストや各種動画をみてハンズオンを始めて接続ができない状態となり、チャットおよびリモートでSOSを受けることがあります。その際、AWSのどのようなネットワーク構成でEC2が立てられているのか確認することからスタートします。今後はそういった場合のガイドとして準備しておこうという意味で本記事を作成しました。後半のサーバー側でのチェック項目はターミナルでのアクセスに限らずSSHクライアント利用の場合でも共通の内容です。

本記事の対象者

  • ターミナルからSSH接続している。
  • ハンズオンをテキストもしくは動画の通りに進めてみたが、EC2にSSHできない。
  • ググって記事を見つけたが、自分が立てたEC2と記事のEC2の環境が同じなのか判断がつかない。
  • エラーをきっかけにその周辺知識も習得しておきたい方

前提条件

  • EC2インスタンス起動時にキーペアを作成している
  • SSHするEC2インスタンスは「Running(起動)」の状態である。

クライアント側でのチェック項目

まずはSSHコマンド

ssh -i ~/.ssh/<ファイル名>.pem ec2-user@<EC2のパブリックIPv4アドレス>

ⅰ.【Check】上記コマンドの前半の記述ディレクトリに秘密鍵がない(mvしてない)

Warning: Identity file /Users/<ユーザー名>/.ssh//<ファイル名>.pem not accessible: No such file or directory.
ec2-user@<EC2のパブリックIPv4アドレス>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

<確認および対応>

.ssh に秘密鍵が存在するか確認

cd ~/.ssh
ls -a

秘密鍵: <ファイル名>.pem が見当たらない場合

EC2インスタンス作成時にキーペアを作成してダウンロードされる場所は、Macの「ダウンロード」ディレクトリです。上記のSSHコマンドで記載されている「.ssh」ディレクトリではありません。鍵を移動します。

mv ~/Downloads/<ファイル名>.pem  ~/.ssh/

次の項目【 ⅱ.秘密鍵のパーミッションが適切でない】に進んでください。

ⅱ.【Check】秘密鍵のパーミッションが適切でない

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/<ユーザー名>/.ssh/<ファイル名>.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/<ユーザー名>/.ssh/<ファイル名>.pem": bad permissions
ec2-user@<EC2のパブリックIPv4アドレス>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

<確認および対応>

pemファイルのパーミッションを400に変更する (400・・・ファイルの所有者のみ読み込みを許可)

cd ~/.ssh
chmod 400 <ファイル名>.pem

参考サイト:Linuxの権限確認と変更(chmod)(超初心者向け)

https://qiita.com/shisama/items/5f4c4fa768642aad9e06

ⅲ.【Check】コマンドを入力してもカーソルが入力待ち状態で何も起こらない

<確認および対応>

【 ⅰ:VPCを作成した】 に進んでください ※サーバー(AWS、EC2)側に問題あり

サーバー(AWS、EC2)側でのチェック項目

ⅰ.【Check】 VPCの作成状況

■ VPCは作成していない。

→ EC2はデフォルトVPCに立てられています ⅱへ進む

■ 「VPCのみ」で作成(サブネットは作成していない)EC2は作成したVPCに立てた

→ EC2プライベートなサブネットに立ててある状態です ⅲへ進む

■ 「VPCなど」で作成。パブリック、プライベート作成。 EC2はパブリックサブネットに立てた

→ ⅲへ進む

■ 「VPCなど」で作成。パブリック、プライベート作成。 EC2は意図してプライベートサブネットに立てた

→ ⅳへ進む

ⅱ.【Check】デフォルトVPCに立てられています

<確認および対応>

  • スクリーンショットの通りの設定になっているか確認してください。
    デフォルトでは

    ・ パブリックIPの割り当ては「有効」
    ・ セキュリティグループはインターネットからの「SSH」は許可のセキュリティグループを新規に作成

    となるため、AWS側の設定は問題ありません。何か設定を変更していませんか?

  • あとはパブリックIPをもう一度間違いないか確認してからSSHのコマンドをもう一度実施してください。

ⅲ.【Check】パブリックなサブネットに立てられています

<確認および対応>

  • ルートテーブルの送信先にインターネットゲートウェイは登録されていますか?

存在しない場合はEC2起動時に選択を間違えてプライベートサブネットを選択している可能性があります。
その場合は現在のインスタンスとは別にインスタンスをパブリックサブネットを指定して新規もしくはAMIから起動し、現在のインスタンスを削除してください。 ※現在のインスタンスの移動はできません。

  • アタッチされているセキュリティグループのインバウンドルールにSSHは登録されていますか?送信元は踏み台インスタンスのセキュリティグループIDになっていますか?

    図を参考に設定値を変更してしてみてください。

  • パブリックIPの自動割り当てが「有効」になっていますか?

後からパブリックIPを有効にする設定は出来ないため以下のいずれかの方法をとってください。
・ElasticIPを割り当て、このインスタンスに関連づける(アタッチする)
・現在のインスタンスとは別にインスタンスをパブリックIPの自動割り当てを「有効」で起動し、現在のインスタンスを削除してください。

ⅳ.【Check】プライベートなサブネットに立てられています

<確認および対応>

  • パブリックサブネットにメンテナンス用の踏み台インスタンスはありますか?起動していますか?

以上に問題なければ、踏み台インスタンスの設定を 「ⅲ.【Check】パブリックなサブネットに立てられています」に沿って確認してください。以下は現在のインスタンスでの確認項目です。

  • アタッチされたセキュリティグループのインバウンドルールの送信元は踏み台インスタンスにアタッチされたセキュリティグループのIDになっていますか?

インバウンド「SSH」『ポート22」「踏み台インスタンスにアタッチされたセキュリティグループのID」に設定をしてください。

最後にSSHの接続方法です。踏み台経由となるのでconfigファイルを作成してワンライナで接続するのがセキュリティ的にスマートです。

  • 踏み台インスタンス経由でのSSH(多段SSH)の方法に間違いはありませんか?

参考サイト:踏み台サーバ経由の多段SSH接続をローカル端末の秘密鍵のみで実施する

https://dev.classmethod.jp/articles/bastion-multi-stage-ssh-only-local-pem/

おわりに

AWSの学習時にはいろいろな教材を利用して、自ら構築をされる方がほとんどだと思います。
基本となる3つの設定に「ルートテーブル」「セキュリティグループ」「パブリックIPアドレス」この3つの設定がインターネットと疎通できる条件が揃っているかを確認することが重要です。EC2インスタンスを起動した後にこれらの設定は変更することは出来ない仕様になっています。

ここで紹介した基本3つの各設定の詳しい資料として公式ドキュメントURLを案内します。
少し難しい内容かもしれませんが、デフォルト値がどうなっているのか?後から変更ができないのであれば、どう対処すれば良いのか?などの情報が記載されています。試験対策としても、実際の運用時にも役立つ内容です。

ルートテーブル
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Route_Tables.html

セキュリティグループ
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html
パブリックIPアドレス
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-public-addresses

ここを読んだ受講生の方へ:
エラーが出た、トラブルが出た時こそ学びを深める絶好のチャンスです。うまく、早く的確な記事を検索し先に進む能力ももちろん大事ですが、詰まった時こそきちんと理解する、経験をすることが後々に活きてきます。
ぜひ、参考サイト、公式の記事も読んで知識を自分のものにできるようにしてみてください。

ここで記載した以外にも「こんなパターンもあるのでは?」といった意見等あれば、こちらは受講生に限らず是非コメントいただけたらと思います。よろしくお願いします。

Discussion