AWS AMI EC2 において、踏み台サーバよりプライベートサーバにSSHキーファイルを使用してログインを試みた時にエラーが多発してソリューションも見つかったので、備忘録としてよくある間違いを列挙
環境
AMI
EC2 踏み台サーバ (Public IPを持っている) インターネットよりEC2 Instance Connect にてログイン
達成したいこと
EC2 踏み台サーバより Private サブネット内のEC2インスタンスにログインしたい。
条件
インスタンス作成時にキーファイルはローカルのPCにダウンロードしてあること(これは他の人からコピーしてもらってもよい)
ソリューション
ダウンロードした pemファイルの中身をコピー
/home/ec2-user/.ssh/ フォルダに 適当なファイル名.pem の名前でファイルを作成 → vim 適当なファイル名.pem で編集
vim 適当なファイル名.pem
i を入力 ( Insertモード )
中身にpemファイルの中身をペースト
ESC(エスケープ入力)で Insertモード終了
:wq を入力して内容を保存
※chmod 400 保存した適当なファイル名.pem で権限を変更 ( 700 と、600 でもOKだった、777→×、770→× 双方共に権限緩すぎ )
SSH接続でプライベートサーバへログイン
ssh ec2-user@10.0.2.85 -i /home/ec2-user/.ssh/適当なファイル名.pem
Last login: Tue May 24 15:55:07 2022 from 10.0.5.23
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
[ec2-user@ip-10-0-2-85 ~]$
[ec2-user@ip-10-0-2-85 ~]$
ログイン成功
間違いの例をエラーメッセージと共に記載
ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed outec2-user@xxx.xxx.xxx.xxx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).etc…
- エラーの原因
- エラー解決方法の一例
クライアントPC(接続元) | EC2 Instance Connect |
EC2インスタンス(接続先) | Amazon Linux 2 |
エラーメッセージ | この記事での呼び方 | 確認箇所 |
[ユーザ@ip]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). | PermissionDeniedエラー | sshコマンド |
Warning: Identity file [秘密鍵] not accessible: No such file or directory. | NoSuchFileエラー | 秘密鍵のパス |
Load key “[秘密鍵]”: bad permissions | BadPermissionエラー | 秘密鍵の権限 |
エラー解決の前にsshの通信を知る
エラーの原因を理解するためにはやろうとしていることがどのような動作で行われるのかをある程度知っておく必要があります。
そのために、sshの通信について軽く触れておきます。
sshの通信は簡略化して書くと以下の3ステップのイメージです。
- 接続先の22番ポートにアクセス
- 接続先で認証を行う (EC2の場合秘密鍵認証)
- ssh接続を確立
PermissionDeniedエラーの原因
PermissionDeniedエラーの原因は1つではなく、様々な要因によって結果的にこのエラーが出力されています。
単体で出ている場合と、他のエラーと一緒に出力されている場合で確認するポイントを切り分けることができますので状況別にご紹介します。
原因は様々と申し上げましたが、このエラー自体が示すものは、「ssh接続の認証のステップで接続先から明示的に拒否されている」と言うことです。
拒否されている理由は実は全て同じで、秘密鍵を持たずに接続先にアクセスしているからです。
残り3つのエラーは「なぜ秘密鍵を持って行けていないのか?」といった観点になります。
PermissionDeniedエラー単体の場合
この場合、秘密鍵の中身をまずは確認してみてください。
私はここで、コピペミスを繰り返しました。
そうなんです。Vim の編集って、意外とミスりやすいんです。
1.Ctrl + V を押下した時に正しく貼り付けられず起こる文字化け
[[C みたいな文字が入力されています。
2.スペースや、余計な文字列が入っている。
右クリックを押して、ペースト範囲を正しくチェックする。
正しく貼り付けられたら、ESC → :wq でファイルの保存
cat /home/ec2-user/.ssh/適当なファイル名.pem
でファイルの中身を確認
PermissionDeniedエラーのsshのコマンド
PermissionDeniedエラーが単体で出ている時は、コマンドが誤っている可能性があります。
$ ssh ec2-user@xxx.xxx.xxx.xxx # (誤)秘密鍵の指定を意味する
-iオプションが抜けている$ ssh ec2-user@xxx.xxx.xxx.xxx [秘密鍵] # 正しいコマンドの一例$ ssh ec2-user@xxx.xxx.xxx.xxx -i [秘密鍵]
BadPermissionエラーが一緒に出ている場合
BadPermissionエラーは秘密鍵の権限が適切でないことが原因で発生するエラーです。
BadPermissionエラーで見直すべきは秘密鍵の権限
秘密鍵は、重要な秘匿情報ですので誰でも触れる権限の秘密鍵を使うことはできません。
EC2インスタンスを作成した時AWSから新規の秘密鍵をダウンロードした段階では権限は適切なものではありません。
chmodコマンドでファイルの権限を400 or 600 or 700に変える必要があります。$ chmod 600 [秘密鍵]