SSH 経由で EC2 インスタンスに接続しようとすると、「Server refused our key」というエラーメッセージが発生する理由を知りたいです。
SSH 経由で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスへの接続時に、「Server refused our key」というエラーが表示されます。
解決策
SSH サーバー (sshd) は、次のいずれかの理由でプライベート SSH キーを拒否することがあります。
- Amazon EC2 インスタンスに接続した際、間違ったプライベートキーファイルを使用した。この問題のトラブルシューティングについては、「Amazon EC2 Linux インスタンスへの接続時に、"imported-openssh-key" または "PuTTY Fatal Error" が発生する理由を知りたいです」を参照してください。
- 他のユーザーが /etc/ssh/sshd_config の SSH サーバー設定を変更した。この問題のトラブルシューティングについては、「インスタンスの sshd_config ファイルを変更した後、SSH を使用して EC2 インスタンスにアクセスする方法を教えてください」を参照してください。
- オペレーティングシステム (OS) が /etc/fstab のホームディレクトリをマウントできなかった。この問題のトラブルシューティングについては、「EC2 Linux インスタンスを起動しようとすると緊急モードになる理由を知りたいです」を参照してください。
- Amazon EC2 インスタンスに接続した際、Amazon マシンイメージ (AMI) に間違ったユーザー名を使用した。有効なユーザー名のリストについては、Error: Server refused our key_ または _No supported authentication methods available を参照してください。
- 他のユーザーがサーバーから該当ユーザーを削除した。この問題をトラブルシューティングするには、そのユーザーを新しいユーザーとしてサーバーに再度追加します。
インスタンスにアクセス許可の問題がある場合や、ディレクトリが見つからない場合は、Server refused our key というエラーメッセージが表示される場合もあります。インスタンスのアクセス許可とディレクトリを確認するには、次のいずれかの方法を使用します。
EC2 シリアルコンソールを使用する
Linux 用 EC2 シリアルコンソールを有効にした場合は、シリアルコンソールを使用してサポートされている Nitro ベースのインスタンスタイプをトラブルシューティングできます。
Systems Manager を使用してインスタンスにログインし、アクセス許可を確認する
前提条件 AWS Systems Manager Agent (SSM Agent) をインストール済みであること。また、設定が AWS Systems Manager の機能である Session Manager の前提条件に準拠していることも確認してください。
Session Manager を使用してインスタンスをトラブルシューティングするには、次の手順を実行します。
-
Systems Manager コンソールを開きます。
-
home ディレクトリ下のファイルに正しいアクセス許可があることを確認するには、次のコマンドを実行します。
stat /home/ec2-user/ ls -ld /home # Should show drwxr-xr-x (755) ls -ld /home/ec2-user # Should show drwx------ (700) ls -ld /home/ec2-user/.ssh # Should show drwx------ (700) ls -l /home/ec2-user/.ssh/authorized_keys # Should show -rw------- (600)
注: ec2-user を AMI 用の適切なユーザー名に置き換えます。
出力で Access を参照し、構成で次のアクセス許可を使用していることを確認します。
Linux のホームディレクトリ /home のアクセス許可は 0755/drwxr-xr-x である必要があります。
ユーザーのホームディレクトリ /home/ec2-user/ のアクセス許可は 0700/drwx------ である必要があります。
.ssh ディレクトリ /home/ec2-user/.ssh のアクセス許可は 0700/drwx------ である必要があります。
authorized_keys ファイル /home/ec2-user/.ssh/authorized_keys のアクセス許可は 0600/-rw------- である必要があります。
出力例File: '/home/ec2-user/' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 10301h/66305d Inode: 18322 Links: 3 Access: (0700/drwx------) Uid: ( 500/ec2-user) Gid: ( 500/ec2-user)
-
設定のアクセス許可を更新するには、次のコマンドを実行します。
sudo chown root:root /home$ sudo chmod 755 /home$ sudo chown ec2-user:ec2-user /home/ec2-user -R sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh sudo chmod 600 /home/ec2-user/.ssh/authorized_keys
注: ec2-user を AMI 用の適切なユーザー名に置き換えます。
AWSSupport-TroubleshootSSH ランブックを実行する
エラーの原因となる問題を自動的に修正するには、AWSSupport-TroubleshootSSH を実行します。このランブックは Amazon EC2Rescue ツールをインスタンスにインストールし、SSH の実行中、リモート接続エラーの原因となる問題を特定して修正します。詳細については、「SSH を使用して EC2 インスタンスに接続しようとするとエラーが発生します。AWSSupport-TroubleshootSSH オートメーションワークフローを使用して SSH 接続に関する問題をトラブルシューティングする方法を教えてください」を参照してください。
ユーザーデータでインスタンスのアクセス許可を修正する
重要: インスタンスを停止して起動する前に、次の手順を実行してください。
- Amazon Elastic Block Store (Amazon EBS) ボリュームのバックアップを作成します。
注: インスタンスの基盤がインスタンスストアであるか、データを含むインスタンスストアボリュームがある場合、インスタンスの停止時に Amazon EC2 はデータを削除します。インスタンスのルートデバイスがインスタンスストアボリュームの場合、ユーザーデータで SSH キーを変更することはできません。 - 解決手順の実行時に、Amazon EC2 Auto Scaling グループからインスタンスを一時的に除外します。
注: EC2 Auto Scaling グループ内のインスタンスを停止する場合、インスタンスがスケールイン保護設定に基づいて削除される場合があります。Amazon EMR、AWS CloudFormation、または AWS Elastic Beanstalk を使用して起動するインスタンスが、Auto Scaling グループに属している可能性があります。 - インスタンスのシャットダウン動作を Stop に設定し、インスタンスの停止時にインスタンスが削除されないようにします。
- cloud-init をインストールして設定します。詳細については、cloud-init のウェブサイトで「SSH と SSH キーを構成する」を参照してください。
重要: インスタンスのユーザーデータに対する更新は、cloud-init コマンドをサポートするすべてのディストリビューションに影響します。
注: インスタンスを停止または起動する際、インスタンスのパブリック IP アドレスは変更されます。外部トラフィックをインスタンスにルーティングするには、パブリック IP アドレスではなく Elastic IP アドレスを使用することをおすすめします。Amazon Route 53 を使用している場合は、パブリック IP アドレスが変更された際、Route 53 の DNS レコードを更新する必要が生じる場合があります。
ユーザーデータを使用してアクセス許可の問題を解決するには、次の手順を実行します。
-
Amazon EC2 コンソールを開きます。
-
ナビゲーションペインで [インスタンス] を選択し、該当するインスタンスを選択します。
-
[インスタンスの状態] を選択し、**[インスタンスの停止]**を選択します。
注: [インスタンスの停止] を選択できない場合は、インスタンスが停止済みであるか、そのルートデバイスはインスタンスストアボリュームです。 -
[アクション] を選択し、[インスタンス設定] を選択します。
-
[ユーザーデータを編集] を選択し、次のコマンドを入力します。
Content-Type: multipart/mixed; boundary="//"MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --//Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash chown root:root /home chmod 755 /home chown ec2-user:ec2-user /home/ec2-user -R chmod 700 /home/ec2-user /home/ec2-user/.ssh chmod 600 /home/ec2-user/.ssh/authorized_keys --//
注: ec2-user を AMI 用の適切なユーザー名に置き換えます。上記のコマンドを入力する際、余分なスペースを追加しないようにしてください。
-
[保存] を選択します。
デフォルトでは、ユーザーデータコマンドはインスタンスごとに 1 回実行されます。上記のステップでは、デフォルトの動作を変更し、インスタンスの再起動、停止、または起動のたびにパブリックキーを追加するようにします。デフォルトの動作を元に戻すには、カスタムユーザーデータのコマンドを削除します。インスタンスの初回起動後にユーザーデータを実行できるようにすることをおすすめします。ModifyInstanceAttribute API を使用すると、インスタンスのユーザーデータを変更できます。ModifyInstanceAttribute API へのアクセスを制限するには、AWS Identity and Access Management (IAM) ポリシーを使用します。
関連情報
Amazon EC2 のキーペアと Amazon EC2 インスタンス
SSH を使用して Amazon EC2 Linux インスタンスへの接続をトラブルシューティングする方法を教えてください
SSH 経由で EC2 インスタンスに接続しようとすると、「Server refused our key」というエラーが発生する理由を知りたいです
- 言語
- 日本語

関連するコンテンツ
- 質問済み 5ヶ月前