如何排查使用 SSH 连接我的 Amazon EC2 Linux 实例时遇到的问题?

上次更新日期:2021 年 4 月 27 日

我无法连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例。如何排查并解决此问题?

简短描述

要解决此问题,请通过 SSH 登录到 EC2 实例并开启详细消息收发功能。使用 SSH 客户端的输出消息来确定问题的类型。然后,按照故障排除步骤解决问题。

解决方法

确定问题

1.    通过 SSH 登录到 EC2 实例并开启详细消息收发功能:

user@localhost:~$ ssh -v -i my_key.pem ec2-user@11.22.33.44

在上例中,私有密钥文件为 my_key.pem,用户名为 ec2-user@11.22.33.44。请用您的密钥文件和您的用户名替换示例中的密钥文件和用户名。有关更多信息,请参阅使用 SSH 连接到 Linux 实例

2.    使用 SSH 客户端的输出消息来确定问题的类型。

排查问题

注意:如果您已为 Linux 启用 EC2 串行控制台,可以使用它来排查受支持的基于 Nitroa 的实例类型问题。串行控制台可帮助您排查启动问题、网络配置和 SSH 配置问题。串行控制台无需网络连接即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面 (AWS CLI) 访问串行控制台。

在使用串行控制台之前,请在账户层面授予对串行控制台的访问权限。然后,创建 AWS Identity and Access Management(IAM)策略,授予对 IAM 用户的访问权限。此外,每个使用串行控制台的实例都必须至少包含一个基于密码的用户。如果您的实例无法访问,并且您尚未配置对串行控制台的访问权限,可按照以下文章链接中提供的关于手动连接到实例的说明进行操作。

有关为 Linux 配置 EC2 串行控制台的信息,请参阅配置对 EC2 串行控制台的访问权限

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

错误: “连接超时”或“连接被拒”:有关解决此错误的信息,请参阅在尝试使用 SSH 连接到我的 EC2 实例时,我收到“连接被拒”或“连接超时”错误。如何解决此问题?

有关解决 Virtual Private Cloud (VPC) 上的“连接超时”错误的信息,请参阅如何排查 Amazon VPC 中的实例连接超时错误?

错误: “权限被拒绝”或“验证失败”:有关解决此错误的信息,请参阅当我尝试访问我的 EC2 实例时,我收到了“权限被拒绝(公有密钥)”或“身份验证失败,权限被拒绝”错误。如何解决此问题?

错误:“服务器拒绝了我们的密钥”:更多有关解决此错误的信息,请参阅我在尝试使用 SSH 连接到 EC2 实例时为什么会收到“服务器拒绝了我们的密钥”错误?

错误: “imported-openssh-key”或“Putty Fatal Error”:有关解决这些错误的更多信息,请参阅连接 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例时,为什么我会收到 "imported-openssh-key" 或 "Putty Fatal Error" 错误?

错误:“输入‘my_key.pem’的密码”:

如果您已为密钥文件创建了密码,但尚未手动输入密码,则会出现此错误。要纠正此错误,请输入密码或使用 ssh-agent 自动加载密钥。

自动排查 SSH 错误

某些 SSH 错误(例如,资源暂时不可用)可能由各种问题引起。要解决这些类型的错误,或者如果您没有收到特定的错误消息,请运行 AWSSupport-TroubleshootSSH 自动化文档以自动查找和纠正问题。有关更多信息,请参阅如何通过 AWSSupport-TroubleshootSSH 自动化工作流程排查 SSH 连接问题?