為什麼當我嘗試透過 SSH 連線到 EC2 執行個體時,我會收到錯誤 "Server refused our key"?

3 分的閱讀內容
0

當我透過 SSH 連線到我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體時,我收到 "Server refused our key" 錯誤。

簡短描述

SSH 伺服器 (sshd) 會因為很多種原因拒絕私有 SSH 金鑰。以下是一些您收到此錯誤的常見原因:

解決方法

嘗試連線至 Amazon EC2 執行個體時,您對於 AMI 使用不正確的使用者名稱

一般的使用者名稱是 ec2-user、ubuntu、centos、root 或 admin。如需有效使用者名稱的清單,請參閱錯誤: 伺服器拒絕我們的金鑰,或者沒有支援的驗證方法

使用者已從伺服器中刪除或 AWS 帳戶被鎖定

如果已從伺服器中刪除嘗試存取執行個體的使用者,請將使用者再次新增為使用者。如需詳細資訊,請參閱如何將具有 SSH 存取的新使用者帳戶新增至我的 Amazon EC2 Linux 執行個體?

執行個體出現許可問題,或者您遺失目錄

有四種方法可驗證執行個體上的許可和目錄:

方法 1: 使用 EC2 序列主控台

如果已開啟 Linux 用 Amazon EC2 序列主控台,即可用於對支援的 Nitro 型執行個體類型進行疑難排解。您可以透過 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI),存取序列主控台。如需詳細資訊,請參閱設定 EC2 序列主控台的存取權

**方法 2:**使用 AWS Systems Manager Session Manager 登入執行個體,然後檢查權限

**注意:**需要安裝 SSM 代理程式,才能使用此方法。如需 Session Manager 和完整的先決條件清單,請參閱設定 Session Manager

  1. 開啟 AWS Systems Manager 主控台

  2. 啟動工作階段

  3. 使用 stat 命令確定主目錄下方檔案的許可正確無誤。以下是正確許可的清單範例:
    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 document

AWSSupport-TroubleshootSSH 自動化文件會在執行個體上安裝 Amazon EC2Rescue 工具。然後,自動化文件會檢查並修正在透過 SSH 執行 Linux 機器連線期間造成遠端連線錯誤的問題。如需詳細資訊,請參閱我在嘗試使用 SSH 連線至 EC2 執行個體時收到錯誤。如何使用 AWSSupport-TroubleshootSSH 自動化工作流程對 SSH 連線問題進行疑難排解?

方法 4: 將使用者資料用於修正執行個體上的權限

重要:

  • 此復原程序會要求您停止並啟動執行個體。執行此動作時,執行個體儲存體磁碟區上的資料遺失。如需詳細資訊,請參閱 Amazon EC2 執行個體的根磁碟區
  • 如果您的執行個體屬於 Amazon EC2 Auto Scaling 群組,則執行個體可能會在停止時終止。這可能也會發生在使用 AWS Auto Scaling 之服務所啟動的執行個體上,例如 Amazon EMR、AWS CloudFormation、AWS Elastic Beanstalk 等。在這種情況下的執行個體終止會取決於 Auto Scaling 群組的執行個體縮減保護設定。如果您的執行個體屬於 Auto Scaling 群組,請先從 Auto Scaling 群組中移除該執行個體,然後再開始解決方案的步驟。完成解決方案的步驟後,您可以將執行個體新增回 Auto Scaling 群組。
  • 停止和重新啟動執行個體會變更執行個體的公有 IP 位址。將外部流量路由至執行個體時,最佳實務是使用 Elastic IP 地址而非公用 IP 地址。
  • 如果您的執行個體根裝置是執行個體儲存體磁碟區,則無法將使用者資料用於變更 SSH 金鑰。如需詳細資訊,請參閱 Amazon EC2 執行個體的根磁碟區
  • 更新執行個體使用者資料適用於所有支援 Cloud-init 指令的分佈。必須安裝和設定 Cloud-init。如需詳細資訊,請參閱在 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 連線至執行個體。
    **注意:**依預設,使用者資料指令會在每個執行個體執行一次。此程序會變更預設行為,以便在每次執行個體重新開機、停止或啟動時新增公用金鑰。若要還原預設行為,請移除自訂的使用者資料。最佳實務是遵循安全協定並允許執行個體在第一次開機後執行使用者資料。使用 ModifyInstanceAttribute API 方法修改執行個體的使用者資料。若要限制此方法的存取權,請使用 IAM 政策

相關資訊

使用 PuTTY 連線至 Linux 執行個體

Amazon EC2 金鑰對和 Amazon EC2 執行個體

如何對使用 SSH 連線至 Amazon EC2 Linux 執行個體的問題進行疑難排解?

AWS 官方
AWS 官方已更新 7 個月前