SSH を使用して EC2 インスタンスに接続しようとすると、「サーバーがキーを拒否しました」というエラーが表示されるのはなぜですか?

所要時間3分
0

SSH を使用して Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続すると、「サーバーがキーを拒否しました」というエラーが表示されます。

簡単な説明

SSH サーバー (sshd) がプライベート SSH キーを拒否する理由は複数あります。このエラーが表示される一般的な理由は次のとおりです。

解決策

EC2 インスタンスに接続するときに AMI に間違ったユーザー名を使用している

有効なユーザー名のリストについては、「エラー: サーバーはキーを拒否しました、またはサポートされる認証方法はありません」を参照してください。

インスタンスにアクセスしようとしたユーザーがサーバーから削除されたかアカウントがロックされました

インスタンスにアクセスしようとしたユーザーがサーバーから削除された場合は、そのユーザーを新しいユーザーとして追加し直します。詳細については、「SSH アクセスを行える新しいユーザーアカウントを Amazon EC2 Linux インスタンスに追加する方法」を参照してください。

インスタンスにアクセス権限の問題があるか、ディレクトリが見つかりません

インスタンスの権限とディレクトリを確認するには、次の 4 つの方法があります。

方法 1: EC2 シリアルコンソールを使用する

Linux 用 EC2 シリアルコンソール を有効にしている場合は、シリアルコンソールを使用して、サポートされている Nitro ベースのインスタンスタイプをトラブルシューティングできます。シリアルコンソールは、起動に関する問題、ネットワーク構成、および SSH 設定の問題のトラブルシューティングに役立ちます。シリアルコンソールは、ネットワーク接続が機能していなくてもインスタンスに接続します。Amazon EC2 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用してシリアルコンソールにアクセスできます。

シリアルコンソールを使用する前に、アカウントレベルでシリアルコンソールへのアクセスを許可する必要があります。次に、IAM ユーザーにアクセス権を付与する AWS ID およびアクセス管理 (IAM) ポリシーを作成する必要があります。また、シリアルコンソールを使用するすべてのインスタンスには、少なくとも 1 人のパスワードベースのユーザーが含まれている必要があります。インスタンスにアクセスできず、シリアルコンソールへのアクセスを設定していない場合は、方法 2、3、または 4 の指示に従ってください。Linux 用 EC2 シリアルコンソールの設定については、「EC2 シリアルコンソールへのアクセスの設定」を参照してください。

**方法 2:**AWS Systems Manager セッションマネージャーを使用してインスタンスにログインし、権限を確認します

**注:**この方法を使用するには、SSM Agent のインストールが必要です。セッションマネージャーの詳細と前提条件の一覧については、「セッションマネージャーの設定」を参照してください。

1.    [AWS Systems Manager コンソール] を開きます。

2.    セッションを開始します

3.    stat コマンドを使用して、home ディレクトリにあるファイルの権限が正しいことを確認します。正しい権限のリストを以下に示します。

  • たとえば、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-------) でなければなりません。

以下は、stat コマンドとその結果の出力の例です。この例では、ec2-user がユーザー名です。特定の AMI に合わせてユーザー名を変更してください

$ stat /home/ec2-user/
  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)

4.    権限が上記の値と一致しない場合は、次のコマンドを実行します。

$ 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

5.    セッションを終了します

6.    インスタンスに SSH で接続します。

メソッド 3: AWSSupport-TroubleshootSSH ドキュメントを実行して、エラーの原因となっている問題を自動的に修正します

AWSSupport-TroubleshootSSH 自動化ドキュメントでは、Amazon EC2Rescue ツールをインスタンスにインストールし、SSH 経由で Linux マシンに接続するときにリモート接続エラーの原因となるいくつかの問題を確認して修正します。詳細については、「SSH を使用して EC2 インスタンスに接続しようとするとエラーが発生します」を参照してください。AWSSupport-TroubleshootSSH 自動化ワークフローを使用して SSH 接続に関する問題をトラブルシューティングする方法

メソッド 4: ユーザーデータを使用してインスタンスの権限を修正する

重要:

  • この復旧手順では、インスタンスを停止して起動する必要があります。これを行うと、インスタンスストアボリュームのデータは失われます。詳細については、「インスタンスのルートデバイスタイプの決定」を参照してください。
  • インスタンスが Amazon EC2 Auto Scaling グループの一部である場合、インスタンスは停止すると終了する可能性があります。これは、Amazon EMR、AWS CloudFormation、AWS Elastic Beanstalk などの AWS Auto Scalingを使用するサービスによって起動されたインスタンスでも発生する可能性があります。このシナリオでのインスタンスの終了は、Auto Scaling グループのインスタンススケールイン保護設定によって異なります。インスタンスが Auto Scaling グループの一部である場合は、解決手順を開始する前に Auto Scaling グループから一時的にインスタンスを削除します
  • インスタンスを停止して再起動すると、インスタンスのパブリック IP アドレスが変更されます。外部トラフィックをインスタンスにルーティングする場合は、パブリック IP アドレスの代わりに Elastic IP アドレスを使用するのがベストプラクティスです。
  • インスタンスのルートデバイスがインスタンスストアボリュームの場合、ユーザーデータを使用して SSH キーを変更することはできません。詳細については、「インスタンスのルートデバイスタイプの決定」を参照してください。
  • インスタンスのユーザーデータの更新は、cloud-init ディレクティブをサポートするすべてのディストリビューションに適用されます。これらの手順を正常に実行するには、cloud-init をインストールして設定する必要があります。cloud-init SSH モジュールの詳細については、Cloud-init ドキュメントの「SSH-SSH と SSH キーの設定」を参照してください。

1.    Amazon EC2 コンソールを開き、インスタンスを選択します。

2.    [インスタンスの状態] を選択し、[インスタンスの停止] を選択します。

注:****[停止] が使用できない場合は、インスタンスがすでに停止しているか、そのルートデバイスがインスタンスストアボリュームであるかのどちらかです。

3.    [アクション] を選択し、[インスタンス設定] を選択し、[ユーザーデータの編集] を選択します。

4.    次のスクリプトを [ユーザーデータ] フィールドにコピーし、[保存] を選択します。必ずスクリプト全体をコピーし、余分なスペースを追加しないでください。

**注:**次のスクリプトでは、ec2-user というユーザー名を使用しています。ec2-userご使用の AMI のユーザー名に変更してください。

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
--//

5.    インスタンスを起動しインスタンスに SSH で接続します。

**注:**デフォルトでは、ユーザーデータスクリプトはインスタンスごとに 1 回実行されます。このプロシージャは、インスタンスの再起動、停止、または起動のたびにパブリックキーを追加するようにデフォルトの動作を変更します。デフォルトの動作に戻すには、カスタムユーザーデータを削除します。ベストプラクティスとして、インスタンスの初回起動後にユーザーデータを実行できるようにすることによるセキュリティ上の影響を検討してください。インスタンスのユーザーデータは、ModifyInstanceAttribute API メソッドを使用して変更できます。このメソッドへのアクセスを制限するには、IAM ポリシーを使用してください。

関連情報

PuTTY を使用して Windows から Linux インスタンスに接続します

Amazon EC2 キーペアと Windows インスタンス

SSH を使用して Amazon EC2 Linux インスタンスに接続できないのはなぜですか?

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ