為什麼當我嘗試透過 SSH 連線到 EC2 執行個體時,會收到「伺服器拒絕我們的金鑰」錯誤訊息?
當我透過 SSH 連線到 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體時,收到「伺服器拒絕我們的金鑰」錯誤訊息。
解決方法
SSH 伺服器 (sshd) 可能會因下列其中一個原因拒絕私有 SSH 金鑰:
- 嘗試連線至 Amazon EC2 執行個體時,您使用了不正確的私有金鑰檔案。若要對此問題進行疑難排解,請參閱連線至 Amazon EC2 Linux 執行個體時,為何會收到「imported-openssh-key」或「PuTTY Fatal Error」錯誤?
- 有人變更了 /etc/ssh/sshd_config 中的 SSH 伺服器設定。若要對此問題進行疑難排解,請參閱如何在變更執行個體的 sshd_config 檔案後,使用 SSH 存取 EC2 執行個體?
- 作業系統 (OS) 無法掛載 /etc/fstab 主目錄。若要對此問題進行疑難排解,請參閱在我嘗試啟動 EC2 Linux 執行個體時,為什麼它會進入緊急模式?
- 連線到 Amazon EC2 執行個體時,您使用了不正確的 Amazon Machine Image (AMI) 使用者名稱。如需有效使用者名稱的清單,請參閱錯誤: 伺服器拒絕我們的金鑰_,或_沒有支援的驗證方法。
- 有人從伺服器中刪除了使用者。若要對此問題進行疑難排解,請將使用者作為新使用者新增回伺服器。
如果您的執行個體有權限問題或缺少目錄,您也可能會收到伺服器拒絕我們的金鑰錯誤訊息。若要確認執行個體權限和目錄,請使用下列其中一種方法。
使用 EC2 序列主控台
如果已啟用 Linux 用 EC2 序列主控台,即可用於對支援的 Nitro 型執行個體類型進行疑難排解。
使用 Systems Manager 登入執行個體,然後檢查權限
先決條件:安裝 AWS Systems Manager Agent (SSM Agent)。此外,請確定您的組態符合 Session Manager (AWS Systems Manager 的一項功能) 的先決條件。
若要使用 Session Manager 來對執行個體進行疑難排解,請完成下列步驟:
-
開啟 Systems Manager console (Systems Manager 主控台)。
-
若要確定主目錄下的檔案具有正確的權限,請執行下列命令:
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) -
若要更新組態的權限,請執行下列命令:
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 的正確使用者名稱。
執行 AWSSupport-TroubleshootSSH 執行手冊
若要自動修正導致錯誤的問題,請執行 AWSSupport-TroubleshootSSH。執行手冊會在執行個體上安裝 Amazon EC2Rescue 工具,然後識別並修正導致 SSH 期間遠端連線錯誤的問題。如需詳細資訊,請參閱我在嘗試使用 SSH 連線至 EC2 執行個體時收到錯誤。如何使用 AWSSupport-TroubleshootSSH 自動化工作流程對 SSH 連線問題進行疑難排解?
使用使用者資料來修正執行個體上的權限
**重要:**在停止和啟動執行個體之前,請執行下列動作:
- 建立 Amazon Elastic Block Store (Amazon EBS) 磁碟區的備份。
**注意:**如果您的執行個體是執行個體儲存體備份,或具有包含資料的執行個體儲存體磁碟區,則當您停止執行個體時,Amazon EC2 會刪除該資料。如果您的執行個體根裝置是執行個體儲存體磁碟區,則無法將使用者資料用於變更 SSH 金鑰。 - 完成解決步驟後,暫時從其 Amazon EC2 Auto Scaling 群組中移除執行個體。
**注意:**如果您停止 EC2 Auto Scaling 群組中的某個執行個體,則可能會根據您的縮減保護設定終止該執行個體。您使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 啟動的執行個體,可能位於 Auto Scaling 群組中。 - 將執行個體關閉行為設定為停止,以確保執行個體在您停止時不會終止。
- 安裝並設定 cloud-init。如需詳細資訊,請參閱 cloud-init 網站上的設定 SSH 和 SSH 金鑰。
**重要:**對執行個體使用者資料所做的更新會影響所有支援 cloud-init 命令的發行版。
**注意:**當您停止和啟動執行個體時,該執行個體的公有 IP 位址也會變更。最佳做法是使用彈性 IP 位址而不是公有 IP 位址,將外部流量路由到執行個體。如果您使用 Amazon Route 53,則可能需要在公有 IP 位址變更時更新 Route 53 DNS 記錄。
若要使用使用者資料修正權限問題,請完成下列步驟:
-
開啟 Amazon EC2 console (Amazon EC2 主控台)。
-
在導覽窗格中,選擇 Instances (執行個體),然後選取您的執行個體。
-
選擇 Instance state (執行個體狀態),然後選擇 Stop Instance (停止執行個體)。
注意:如果您無法選擇停止執行個體,則表示該執行個體已停止,或者其根裝置是執行個體儲存體磁碟區。 -
選擇 Actions (動作),然後選擇 Instance settings (執行個體設定)。
-
選擇 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 的正確使用者名稱。輸入上述命令時,請勿加入多餘的空格。
-
選擇 Save (儲存)。
預設情況下,使用者資料命令會在每個執行個體執行一次。上述步驟會變更預設行為,使執行個體在每次重新啟動、停止或啟動,都會新增公有金鑰。若要還原預設行為,請移除自訂的使用者資料命令。最佳做法是允許使用者資料在執行個體的第一次啟動之後執行。您可以使用 ModifyInstanceAttribute API來修改執行個體的使用者資料。若要限制對 ModifyInstanceAttribute API 的存取,請使用 AWS Identity and Access Management (IAM) 政策。
相關資訊
Amazon EC2 金鑰對和 Amazon EC2 執行個體

