SSH
EC2
error
permission

EC2のSSH接続でPermission denied(publickey)と出た時の対処法

More than 3 years have passed since last update.

原因と解決策

次の3パターンが考えられる
1. 間違った鍵で接続しようとしている。キーペアは正しいか確認する
2. 間違ったユーザー名で接続しようとしている。正しいユーザー名かどうか確認する
3. ホスト名が間違っている。ホスト名が正しいかどうか確認する。

これでもダメな場合

インスタンス内のSSH設定を確認
/etc/ssh/sshd_config

このあたりを確認

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords yes

設定を変えたら再起動

$ sudo service sshd restart

各項目補足

とりあえず PubkeyAuthentication 以外は no にしておいたほうが良い。

PermitRootLogin

rootユーザーでのログインを許可する設定。基本的にnoにすべき。
アプリケーションの都合でどうしてもrootユーザーでのログインが必要な場合はMatchを使ってクライアントを絞る。

PermitRootLogin no
Match Address 10.0.0.1
PermitRootLogin yes
PubkeyAuthentication

公開鍵認証を許可する設定。RSA鍵で認証するならyes。
noになってるとたぶんPermission denied(publickey)にはならずにパスワードを聞かれる。

PasswordAuthentication

パスワード認証を許可する設定。yesだとブルートフォース攻撃の的に。

PermitEmptyPasswords

パスワード認証の場合に空パスワードを許可するかどうか。
鍵のパスフレーズとは無関係。

おまけ

ChallengeResponseAuthentication

チャレンジレスポンス認証を許可する設定。noにしておく。
これがyesになっているとパスワードでログインできてしまう。ブルートフォース攻撃の的にされる。

AuthorizedKeysFile

鍵認証でのログインを許可するクライアントの共有鍵を定義するファイル。通常は %h/.ssh/authorized_keys とかになってるはず。
エラーメッセージがPermission denied (publickey). って出る場合は大体このauthorized_keysに書かれている公開鍵とクライアントの鍵が合ってないのが原因。
 ↓
1. 間違った鍵で接続しようとしている。キーペアは正しいか確認する
2. 間違ったユーザー名で接続しようとしている。正しいユーザー名かどうか確認する
3. ホスト名が間違っている。ホスト名が正しいかどうか確認する。