問題の説明
SSH を使用して Linux インスタンスに接続すると、正しいユーザー名とパスワードを使用しても、"Permission denied, please try again" というメッセージが表示され、接続に失敗します。
問題の診断
VNC 接続を使用して ECS インスタンスにログインします。
[ECS コンソール - インスタンス]に移動します。上部メニューで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動します。 [Connect] をクリックし、[VNC] を選択します。 ユーザー名とパスワードを入力して ECS インスタンスにログインします。
-
SSH サービスの設定を確認します。
設定で
PermitRootLoginまたはPasswordAuthenticationパラメーターがnoに設定されている場合は、「ユースケース 1:SSH 設定によるログオン拒否」を参照してください。-
PermitRootLogin:noに設定すると、このパラメーターは root ユーザーが SSH 経由でログインするのを防ぎます。 -
PasswordAuthentication:noに設定すると、このパラメーターはすべてのユーザーがパスワード認証でログインするのを防ぎます。
sudo cat /etc/ssh/sshd_config -
-
システムのセキュリティログを確認します。
SELinux ポリシーがログイン試行をブロックすると、システムセキュリティログにエラーメッセージが記録されます。
SELinux ポリシーは、強制アクセス制御 (Mandatory Access Control) ルールのセットであり、各プロセスがファイル、ポート、またはその他のリソースに対して実行できる操作を定義します。
# CentOS/RHEL システムの場合 sudo grep -iE --color=auto 'Could not get shadow information' /var/log/secure # Debian/Ubuntu システムの場合 sudo grep -iE --color=auto 'Could not get shadow information' /var/log/auth.logコマンドが出力を返さない場合、SELinux ポリシーが原因である可能性が高いです。「ユースケース 2:SELinux ポリシーによるログオンブロック」をご参照ください。
解決策
ユースケース 1:SSH 設定によるログオン拒否
-
設定の変更
sudo vi /etc/ssh/sshd_config必要に応じてパラメーターを調整します:
-
パスワード認証の許可:
PasswordAuthentication noをPasswordAuthentication yesに変更します。 -
root ユーザーのログオン許可:
-
キーベースの認証を許可 (推奨):キーペアを使用して root としてログオンするには、
PermitRootLoginをprohibit-passwordに設定します。 -
パスワード認証の許可:
PermitRootLogin noをPermitRootLogin yesに変更します。重要パスワードを使用した root でのログオン (
PermitRootLogin yes) を許可すると、インスタンスがブルートフォース攻撃にさらされるリスクが高まります。代わりに、キーベースの認証を使用するか、ソース IP アドレスによるアクセスを制限することを推奨します。
-
ファイルを変更した後、
Escキーを押し、:wqと入力してEnterキーを押し、ファイルを保存して終了します。 -
-
設定の確認とサービスの再起動
-
設定ファイルの構文を確認します。出力がない場合は、構文が正しいことを意味します。
sudo sshd -t -
SSH サービスを再起動して変更を適用します。
sudo systemctl restart sshd
-
-
接続の確認
再度 SSH を使用してインスタンスに接続し、問題が解決されたことを確認します。
ユースケース 2:SELinux ポリシーによるログオンブロック
-
SELinux の現在のステータスの確認
SELinux が
enforcingモードになっているか確認します。sudo sestatus出力に
SELinux statusがenabled、Current modeがenforcingと表示されている場合、SELinux ポリシーは有効です。 -
アクセスを復元するための一時的な SELinux モードの変更
一時的に SELinux を
Permissiveモードに切り替えます。このモードでは、SELinux は警告をログに記録しますが、操作をブロックしません。sudo setenforce 0重要この変更は一時的なもので、インスタンスが再起動するとリセットされます。
コマンドを実行した後、再度 SSH を使用してログインを試みます。ログインに成功した場合、SELinux が問題の原因であったことを確認できます。
-
SELinux 設定の永続的な変更 (任意)
-
設定ファイルの変更。SELinux のデフォルトモードを
enforcingからpermissiveに変更します。sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config -
インスタンスの再起動: 変更を適用するためにインスタンスを再起動します。
-
-
接続の確認
再度 SSH を使用してインスタンスに接続し、接続できることを確認します。