AWSの学習の一環で踏み台サーバーとprotectedサブネット内にあるサーバーを作成し、踏み台サーバーからSSHポートフォワーディングを実施していました。
それぞれのサーバーには同じ認証鍵を利用しています。
「認証に失敗しました」in Protctedサーバー
踏み台サーバーにはSSH接続できたのですが、なぜかprotectedサブネットのサーバーに接続しようとすると、これが表示され接続できません。
確認したこと
①protectedサブネット内に配置したインスタンスのキーペアが正しいか
インスタンスの詳細から「起動時に割り当てられたキーペア」を確認
②protectedサブネット内に配置したインスタンスのセキュリティグループのインバウンドルールで、踏み台サーバーからのSSH接続が許可されているか
私の場合はどちらも問題なかったため、次の作戦に移ります。
鍵ファイルのパーミッションを確認したい
パーミッションとは、「秘密鍵ファイルを誰が読み取り・書き込みできるかを制御するアクセス権限」のことを指します。
ここがprotectedサーバーのログインユーザー「ec2-user」のみ許可されていないのでは、という仮説です。
確認手順1-EC2 Instance Connectで接続サーバーに接続
現状protectedサーバーにSSH接続できないので、AWSの「EC2 Instance Connect」を利用しました。
1.AWSコンソール画面より、対象のインスタンスを選択。画面右上の「接続」ボタンをクリック

2.EC2 Instance Connectタブを開き、「プライベートIPを使用して接続」を選択。その他必須項目を入力し「接続」

確認手順2-ec2-userの.sshディレクトリと鍵ファイルを確認
EC2 Instance Connectから対象サーバーにアクセスできたら、ec2-userの.sshディレクトリと鍵ファイルを確認し、意図しない場合は修正を行います。
1.ec2-userのホームディレクトリの確認
ls -ld /home/ec2-user'
結果:
drwxr-xr-x. 3 apache apache ・・・
2.ec2-userの.sshディレクトリのパーミッション確認
ls -ld /home/ec2-user/.ssh
結果:
drwxr-xr-x. 2 apache apache・・・
原因
上記の結果から、ec2-userのパーミッションが、ディレクトリの所有者とグループが apache apache になっていました。
ec2-userとしてログインしたい場合、これらのファイルとディレクトリの所有者はec2-userでなければなりません。
また、/home/ec2-userと/home/ec2-user/.sshのどちらもパーミッションが drwxr-xr-x (755) になっていることが分かるのですが、この場合他ユーザーも読み取り、実行権限がある状態になっているようなので、ついでに修正します。
修正
1.所有者をec2-userに変更する
chown -R ec2-user:ec2-user /home/ec2-user
2.パーミッションを厳格にする
# /home/ec2-user ディレクトリを700 に変更
chmod 700 /home/ec2-user
# /home/ec2-user/.ssh ディレクトリを 700 に変更
chmod 700 /home/ec2-user/.ssh
# .ssh/authorized_keys ファイルを 600 に変更
chmod 600 /home/ec2-user/.ssh/authorized_keys
3.最後に修正の確認
ls -ld /home/ec2-user
ls -ld /home/ec2-user/.ssh
ls -l /home/ec2-user/.ssh/authorized_keys
以下になっていればOK
drwx------. 3 ec2-user ec2-user ... /home/ec2-user
drwx------. 2 ec2-user ec2-user ... /home/ec2-user/.ssh
-rw-------. 1 ec2-user ec2-user ... /home/ec2-user/.ssh/authorized_keys
結果
上記でSSH接続ができるようになりました。
通常、この所有者が変わることはなく、なぜ所有者が書き換わったのか不明ですが、ウェブサーバーなどのサービス設定時に誤って/home/ec2-userディレクトリにアクセスし、権限が変更された可能性があるのかな、という推察です。
参考:https://blog.serverworks.co.jp/sshpermission
https://repost.aws/ja/knowledge-center/new-user-accounts-linux-instance
