Global outage event
If you’re experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
当我尝试通过 SSH 连接到 EC2 实例时,为什么会收到“Server refused our key”(服务器拒绝了我们的密钥)错误消息?
当我通过 SSH 连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例时,我收到“Server refused our key”(服务器拒绝了我们的密钥)错误。
解决方法
SSH 服务器 (sshd) 可能会因以下原因之一而拒绝 SSH 私钥:
- 您在连接到 Amazon EC2 实例时使用了错误的私钥文件。要解决此问题,请参阅为什么我在连接到 Amazon EC2 Linux 实例时收到“imported-openssh-key”或“PuTTY Fatal Error”(PuTTY 致命错误)错误?
- 有人修改了 /etc/ssh/sshd_config 中的 SSH 服务器设置。要解决此问题,请参阅更改实例的 sshd_config 文件后,如何使用 SSH 访问我的 EC2 实例?
- 操作系统 (OS) 无法挂载 /etc/fstab 主目录。要解决此问题,请参阅为什么在尝试启动 EC2 Linux 实例时,它会进入紧急模式?
- 您在连接到 Amazon EC2 实例时对亚马逊机器映像 (AMI) 使用了错误的用户名。有关有效用户名的列表,请参阅“错误: 服务器拒绝了我们的密钥_”或 _No supported authentication methods available。
- 有人从服务器中删除了用户。要解决此问题,请将该用户作为新用户添加回服务器。
如果您的实例存在权限问题或缺少目录,您可能还会收到 Server refused our key(服务器拒绝了我们的密钥)错误消息。要验证您的实例权限和目录,请使用以下方法之一。
使用 EC2 Serial Console
如果您激活了适用于 Linux 的 EC2 Serial Console,则可以使用串行控制台对支持的基于 Nitro 的实例类型进行故障排除。
使用 Systems Manager 登录实例并检查权限
先决条件:安装 AWS Systems Manager Agent (SSM Agent)。此外,请确保您的配置符合会话管理器(AWS 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 的正确用户名。
在输出中,检查 Access(访问权限),以确保您的配置使用以下权限:
/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 组中。 - 将实例关闭行为设置为 Stop(停止),以确保实例在您停止时不会终止。
- 安装和配置 cloud-init。有关详细信息,请参阅 cloud-init 网站上的 Configure SSH and SSH keys。
**重要事项:**对实例的用户数据的更新会影响所有支持 cloud-init 命令的发行版。
**注意:**当停止并启动某个实例时,该实例的公共 IP 地址将发生变化。最佳实践是使用弹性 IP 地址而不是公共 IP 地址将外部流量路由到您的实例。如果您使用的是 Amazon Route 53,则在公共 IP 地址发生变化时可能需要更新 Route 53 DNS 记录。
要使用用户数据修复权限问题,请完成以下步骤:
-
打开 Amazon EC2 控制台。
-
在导航窗格中,选择 Instances(实例),然后选择您的实例。
-
选择 Instance state(实例状态),然后选择 Stop Instance(停止实例)。
**注意:**如果您无法选择 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(保存)。
-
启动实例,然后使用 SSH 连接到实例。
默认情况下,用户数据命令对于每个实例运行一次。上述步骤会更改默认行为,会在实例每次重启、停止或启动时添加公钥。要恢复默认行为,请删除自定义用户数据命令。最佳做法是允许用户数据在实例首次启动后运行。您可以使用 ModifyInstanceAttribute API 来修改实例的用户数据。要限制对 ModifyInstanceAttribute API 的访问,请使用 AWS Identity and Access Management (IAM) 策略。
相关信息
如何解决使用 SSH 连接到 Amazon EC2 Linux 实例时出现的问题?
当我尝试通过 SSH 连接到 EC2 实例时,为什么会收到“Server refused our key”(服务器拒绝了我们的密钥)错误?

