Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何解決在存取 EC2 執行個體時收到的「Permission denied (publickey)」(權限遭拒 (publickey)) 或「Authentication failed, permission denied」(驗證失敗,權限遭拒) 錯誤?
在存取我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體時,我收到「Permission denied (publickey)」(權限遭拒 (publickey)) 或「Authentication failed, permission denied」(驗證失敗,權限遭拒) 錯誤。
簡短說明
「Permission denied (publickey)」(權限遭拒 (publickey)) 和「Authentication failed, permission denied」(驗證失敗,權限遭拒) 錯誤是由於下列原因所導致:
- 連線時,您使用錯誤的 Amazon Machine Image (AMI) 使用者名稱。
- 您擁有錯誤的執行個體作業系統 (OS) 檔案權限。
- authorized_keys 檔案具有不正確的 SSH 公開金鑰 (.pub) 檔案,或者您在沒有金鑰的情況下啟動執行個體。
- 沒有正確為您的 authorized_keys 檔案或 .ssh 資料夾命名。
- authorized_keys 檔案或 .ssh 資料夾已刪除。
- (僅限 Ubuntu 20.x) 您在 SSH 組態中使用 AuthorizedKeysCommand。
解決方法
確認您的 AMI 使用者名稱是否正確
確認作業系統內的檔案權限正確,且 authorized_keys 檔案中有正確的 SSH 公開金鑰
若要驗證您的組態,請使用下列其中一種方法。
使用 EC2 序列主控台
如果您已啟用適用於 Linux 的 EC2 序列主控台,則可以使用主控台來對支援的 Nitro 型執行個體類型進行疑難排解。序列主控台可連線至執行個體,無需網路連線。您可以透過 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI),存取序列主控台。
使用序列主控台之前,先在 AWS 帳戶層級授予主控台存取權。然後,建立 AWS Identity and Access Management (AWS IAM) 政策,以授予 IAM 使用者主控台存取權。每個使用序列主控台的執行個體都必須包含至少一個密碼型使用者。如需有關如何設定適用於 Linux 的 EC2 序列主控台的資訊,請參閱設定 EC2 序列主控台的存取權。
如果您的執行個體無法連線,且您尚未設定序列主控台的存取權,請使用其他方法來驗證您的組態。
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
使用 Systems Manager Session Manager
**注意:**若要使用此方法,您必須安裝 SSM Agent。如需使用 Systems Manager 的先決條件清單,請參閱步驟 1: 完成 Session Manager 先決條件。
使用 AWS Systems Manager Session Manager 來登入執行個體並進行更正。請完成下列步驟:
-
若要檢查主目錄下的檔案權限是否正確無誤,請執行 ls -ld 命令:
ls -ld /home/ec2-user/
注意:根據您的執行個體 Amazon Machine Image (AMI) 使用您的使用者名稱取代 ec2-user。
您會收到類似於下列範例的輸出:drwx------ 3 ec2-user ec2-user 4096 Apr 1 08:31 /home/ec2-user/
下列範例顯示了正確的必要權限清單:
針對 /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-------)。 -
在本機電腦上,確認您使用的是 SSH 公開金鑰。
-
如果輸出中沒有 SSH 公開金鑰的簽名,請更新 authorized_keys 檔案以允許您的 SSH 金鑰。執行下列命令:
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys
**注意:**使用您的 SSH 公開金鑰取代範例金鑰。
-
若要更正權限,請在 EC2 執行個體上執行下列命令:
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
執行 AWSSupport-TroubleshootSSH 自動化執行手冊
使用 AWSSupport-TroubleshootSSH 來檢查並更正導致透過 SSH 遠端連線至 Linux 機器錯誤的一些問題。如需詳細資訊,請參閱我在嘗試使用 SSH 連線至 EC2 執行個體時收到錯誤。如何使用 AWSSupport-TroubleshootSSH 自動化工作流程對 SSH 連線問題進行疑難排解?
使用使用者資料指令碼修復 SSH 權限,並將正確的 SSH 公開金鑰新增至 authorized_key 檔案
**重要:**若要使用此方法,您必須停止執行個體。當您停止執行個體時,會產生下列效果:
- 如果您的執行個體由 Amazon Elastic Block Storage (Amazon EBS) 執行個體儲存體備份,或具有包含資料的執行個體儲存體磁碟區,則資料就會遺失。
- 如果您的執行個體屬於 Amazon EC2 Auto Scaling 群組,則 Amazon EC2 Auto Scaling 可能會終止執行個體。您使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 啟動的執行個體,可能屬於 Auto Scaling 群組。此案例中的執行個體終止情況,會取決於 Auto Scaling 群組的執行個體縮減保護設定。如果執行個體屬於 Auto Scaling 群組,請先暫時從 Auto Scaling 群組中移除該執行個體,然後再完成下列步驟。
- 執行個體的公用 IP 位址會變更。將外部流量路由至執行個體時,最佳實務是使用 Elastic IP 位址而非公用 IP 位址。
若要修復您的 SSH 權限,請完成下列步驟:
-
開啟 Amazon EC2 主控台。
-
從導覽窗格中選擇「Instances」(執行個體),然後選取您想要啟動的執行個體。
-
選擇「Actions」(動作),然後選擇「Instance settings」(執行個體設定)。
-
選擇「Edit User Data」(編輯使用者資料)。
-
在「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 OS_USER=os-user chown root:root /home chmod 755 /home chown $OS_USER:$OS_USER /home/$OS_USER -R chmod 700 /home/$OS_USER chmod 700 /home/$OS_USER/.ssh chmod 600 /home/$OS_USER/.ssh/authorized_keys --//
**注意:**使用與啟動執行個體的 AMI 相關聯的使用者名稱取代 os-user。
-
選擇 Save (儲存)。
-
在本機電腦上,確認您使用的是 SSH 公開金鑰。
-
如果輸出中沒有 SSH 公開金鑰的簽名,則將金鑰新增至使用者資料指令碼。如果簽名相符,請繼續執行下一個步驟。
具有 SSH 公開金鑰的使用者資料指令碼範例:
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 OS_USER=os-user chown root:root /home chmod 755 /home chmod 700 /home/$OS_USER chmod 700 /home/$OS_USER/.ssh chmod 600 /home/$OS_USER/.ssh/authorized_keys echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/$OS_USER/.ssh/authorized_keys chown $OS_USER:$OS_USER /home/$OS_USER -R --//
**注意:**上述使用者資料指令碼設定為在每次重新啟動執行個體時執行。在重新取得執行個體的存取權之後,請移除使用者資料指令碼。
(僅限 Ubuntu 20.x) 檢查 SSH 組態的 AuthorizedKeysCommand
在 Ubuntu 20.x 中,預設會安裝 EC2 Instance Connect。當您設定用於 SSH 身分驗證的 AuthorizedKeysCommand 和 AuthorizedKeysCommandUser 設定時,EC2 Instance Connect 安裝不會更新這些設定。因此,您無法使用 EC2 Instance Connect。若要解決此問題,請從您的 SSH 組態中移除 AuthorizedKeysCommand 和 AuthorizedKeysCommandUser。
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- 已提問 2 年前lg...
- 已提問 5 個月前lg...
- AWS 官方已更新 3 個月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前