Skip to content

SSH 経由で EC2 インスタンスに接続しようとすると、「Server refused our key」というエラーメッセージが発生する理由を知りたいです。

所要時間3分
0

SSH 経由で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスへの接続時に、「Server refused our key」というエラーが表示されます。

解決策

SSH サーバー (sshd) は、次のいずれかの理由でプライベート SSH キーを拒否することがあります。

インスタンスにアクセス許可の問題がある場合や、ディレクトリが見つからない場合は、Server refused our key というエラーメッセージが表示される場合もあります。インスタンスのアクセス許可とディレクトリを確認するには、次のいずれかの方法を使用します。

EC2 シリアルコンソールを使用する

Linux 用 EC2 シリアルコンソールを有効にした場合は、シリアルコンソールを使用してサポートされている Nitro ベースのインスタンスタイプをトラブルシューティングできます。

Systems Manager を使用してインスタンスにログインし、アクセス許可を確認する

前提条件 AWS Systems Manager Agent (SSM Agent) をインストール済みであること。また、設定が AWS Systems Manager の機能である Session Manager の前提条件に準拠していることも確認してください。

Session Manager を使用してインスタンスをトラブルシューティングするには、次の手順を実行します。

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

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

  3. 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-userAMI 用の適切なユーザー名に置き換えます。
    出力で 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)
  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

    注: ec2-userAMI 用の適切なユーザー名に置き換えます。

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

  6. SSH を使用してインスタンスに接続します

AWSSupport-TroubleshootSSH ランブックを実行する

エラーの原因となる問題を自動的に修正するには、AWSSupport-TroubleshootSSH を実行します。このランブックは Amazon EC2Rescue ツールをインスタンスにインストールし、SSH の実行中、リモート接続エラーの原因となる問題を特定して修正します。詳細については、「SSH を使用して EC2 インスタンスに接続しようとするとエラーが発生します。AWSSupport-TroubleshootSSH オートメーションワークフローを使用して SSH 接続に関する問題をトラブルシューティングする方法を教えてください」を参照してください。

ユーザーデータでインスタンスのアクセス許可を修正する

重要: インスタンスを停止して起動する前に、次の手順を実行してください。

注: インスタンスを停止または起動する際、インスタンスのパブリック IP アドレスは変更されます。外部トラフィックをインスタンスにルーティングするには、パブリック IP アドレスではなく Elastic IP アドレスを使用することをおすすめします。Amazon Route 53 を使用している場合は、パブリック IP アドレスが変更された際、Route 53 の DNS レコードを更新する必要が生じる場合があります。

ユーザーデータを使用してアクセス許可の問題を解決するには、次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで [インスタンス] を選択し、該当するインスタンスを選択します。

  3. [インスタンスの状態] を選択し、**[インスタンスの停止]**を選択します。
    注: [インスタンスの停止] を選択できない場合は、インスタンスが停止済みであるか、そのルートデバイスはインスタンスストアボリュームです。

  4. [アクション] を選択し、[インスタンス設定] を選択します。

  5. [ユーザーデータを編集] を選択し、次のコマンドを入力します。

    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-userAMI 用の適切なユーザー名に置き換えます。上記のコマンドを入力する際、余分なスペースを追加しないようにしてください。

  6. [保存] を選択します。

  7. インスタンスを起動し、SSH を使用してインスタンスに接続します。

デフォルトでは、ユーザーデータコマンドはインスタンスごとに 1 回実行されます。上記のステップでは、デフォルトの動作を変更し、インスタンスの再起動、停止、または起動のたびにパブリックキーを追加するようにします。デフォルトの動作を元に戻すには、カスタムユーザーデータのコマンドを削除します。インスタンスの初回起動後にユーザーデータを実行できるようにすることをおすすめします。ModifyInstanceAttribute API を使用すると、インスタンスのユーザーデータを変更できます。ModifyInstanceAttribute API へのアクセスを制限するには、AWS Identity and Access Management (IAM) ポリシーを使用します。

関連情報

PuTTY を使用して Linux インスタンスに接続する

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

SSH を使用して Amazon EC2 Linux インスタンスへの接続をトラブルシューティングする方法を教えてください

SSH 経由で EC2 インスタンスに接続しようとすると、「Server refused our key」というエラーが発生する理由を知りたいです

コメントはありません

関連するコンテンツ