跳至內容

為什麼當我嘗試透過 SSH 連線到 EC2 執行個體時,會收到「伺服器拒絕我們的金鑰」錯誤訊息?

3 分的閱讀內容
0

當我透過 SSH 連線到 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體時,收到「伺服器拒絕我們的金鑰」錯誤訊息。

解決方法

SSH 伺服器 (sshd) 可能會因下列其中一個原因拒絕私有 SSH 金鑰:

如果您的執行個體有權限問題或缺少目錄,您也可能會收到伺服器拒絕我們的金鑰錯誤訊息。若要確認執行個體權限和目錄,請使用下列其中一種方法。

使用 EC2 序列主控台

如果已啟用 Linux 用 EC2 序列主控台,即可用於對支援的 Nitro 型執行個體類型進行疑難排解。

使用 Systems Manager 登入執行個體,然後檢查權限

先決條件:安裝 AWS Systems Manager Agent (SSM Agent)。此外,請確定您的組態符合 Session Manager (AWS Systems Manager 的一項功能) 的先決條件

若要使用 Session Manager 來對執行個體進行疑難排解,請完成下列步驟:

  1. 開啟 Systems Manager console (Systems Manager 主控台)。

  2. 啟動工作階段

  3. 若要確定目錄下的檔案具有正確的權限,請執行下列命令:

    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 的正確使用者名稱
    在輸出中,檢查
    存取權
    以確認您的組態使用以下權限:
    /home Linux 主目錄必須具有 0755/drwxr-xr-x 權限。
    /home/ec2-user/ 使用者的主目錄必須具有 0700/drwx------ 權限。
    /home/ec2-user/.ssh .ssh 目錄權限必須具有 0700/drwx------ 權限。
    /home/ec2-user/.ssh/authorized_keys 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-user 替換為您 AMI 的正確使用者名稱

  5. 結束工作階段

  6. 使用 SSH 連線到執行個體

執行 AWSSupport-TroubleshootSSH 執行手冊

若要自動修正導致錯誤的問題,請執行 AWSSupport-TroubleshootSSH。執行手冊會在執行個體上安裝 Amazon EC2Rescue 工具,然後識別並修正導致 SSH 期間遠端連線錯誤的問題。如需詳細資訊,請參閱我在嘗試使用 SSH 連線至 EC2 執行個體時收到錯誤。如何使用 AWSSupport-TroubleshootSSH 自動化工作流程對 SSH 連線問題進行疑難排解?

使用使用者資料來修正執行個體上的權限

**重要:**在停止和啟動執行個體之前,請執行下列動作:

**注意:**當您停止和啟動執行個體時,該執行個體的公有 IP 位址也會變更。最佳做法是使用彈性 IP 位址而不是公有 IP 位址,將外部流量路由到執行個體。如果您使用 Amazon Route 53,則可能需要在公有 IP 位址變更時更新 Route 53 DNS 記錄

若要使用使用者資料修正權限問題,請完成下列步驟:

  1. 開啟 Amazon EC2 console (Amazon EC2 主控台)。

  2. 在導覽窗格中,選擇 Instances (執行個體),然後選取您的執行個體。

  3. 選擇 Instance state (執行個體狀態),然後選擇 Stop Instance (停止執行個體)。
    注意:如果您無法選擇停止執行個體,則表示該執行個體已停止,或者其根裝置是執行個體儲存體磁碟區。

  4. 選擇 Actions (動作),然後選擇 Instance settings (執行個體設定)。

  5. 選擇 Edit user data (編輯使用者資料),然後輸入以下命令:

    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 的正確使用者名稱。輸入上述命令時,請勿加入多餘的空格。

  6. 選擇 Save (儲存)。

  7. 啟動執行個體,然後使用 SSH 連線至執行個體

預設情況下,使用者資料命令會在每個執行個體執行一次。上述步驟會變更預設行為,使執行個體在每次重新啟動、停止或啟動,都會新增公有金鑰。若要還原預設行為,請移除自訂的使用者資料命令。最佳做法是允許使用者資料在執行個體的第一次啟動之後執行。您可以使用 ModifyInstanceAttribute API來修改執行個體的使用者資料。若要限制對 ModifyInstanceAttribute API 的存取,請使用 AWS Identity and Access Management (IAM) 政策

相關資訊

使用 PuTTY 連線至 Linux 執行個體

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

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

為什麼當我嘗試透過 SSH 連線到 EC2 執行個體時,會收到「伺服器拒絕我們的金鑰」錯誤訊息?