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

3 分的閱讀內容
0

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

簡短描述

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

解決方法

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

如需有效使用者名稱的清單,請參閱錯誤: 伺服器拒絕我們的金鑰,或者沒有支援的驗證方法

已從伺服器中刪除嘗試存取執行個體的使用者,或者帳戶已鎖定

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

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

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

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

如果已開啟 Linux 用 EC2 序列主控台,即可用於對支援的 Nitro 型執行個體類型進行疑難排解。序列主控台可協助您疑難排解開機問題、網路組態及 SSH 組態問題。序列主控台不必使用正常運作中的網路連線,就能連線至您的執行個體。您可以使用 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI) 存取序列主控台。

使用序列主控台之前,您必須先在帳戶層級授予主控台存取權。然後,您必須建立 AWS Identity and Access Management (IAM) 政策,將存取權授予 IAM 使用者。此外,每個使用序列主控台的執行個體都必須包含至少一個密碼型使用者。如果您的執行個體無法連線,而且您並未設定序列主控台的存取權,請依照方法 2、3 或 4 中的指示操作。如需設定 Linux 用 EC2 序列主控台的資訊,請參閱設定 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 文件,自動更正造成錯誤的問題

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

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

重要:

  • 此復原程序會要求您停止並啟動執行個體。執行此動作時,執行個體儲存體磁碟區上的資料遺失。如需詳細資訊,請參閱確定執行個體的根裝置類型
  • 如果您的執行個體屬於 Amazon EC2 Auto Scaling 群組,則執行個體可能會在停止時終止。這可能也會發生在使用 AWS Auto Scaling 之服務所啟動的執行個體上,例如 Amazon EMR、AWS CloudFormation、AWS Elastic Beanstalk 等。在這種情況下,執行個體終止取決於您 Auto Scaling 群組的執行個體擴展保護設定。如果您的執行個體屬於 Auto Scaling 群組,請先暫時從 Auto Scaling 群組中移除該執行個體,然後再開始解決方案的步驟。
  • 停止和重新啟動執行個體會變更執行個體的公有 IP 地址。將外部流量路由至您的執行個體時,最佳實務是使用 Elastic IP 地址,而非公用 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 連線至執行個體。

**注意:**依預設,每個執行個體會執行一次使用者資料指令碼。此程序會變更預設行為,以便在每次執行個體重新開機、停止或啟動時新增公用金鑰。若要還原預設行為,請移除自訂的使用者資料。最佳實務是考慮允許使用者資料在執行個體第一次開機後執行的安全影響。您可以使用 ModifyInstanceAttribute API 方法修改執行個體的使用者資料。若要限制此方法的存取權,請使用 IAM 政策

相關資訊

使用 PuTTY 從 Windows 連線至您的 Linux 執行個體

Amazon EC2 金鑰對和 Windows 執行個體

為什麼我無法使用 SSH 連線至 Amazon EC2 Linux 執行個體?

AWS 官方
AWS 官方已更新 1 年前