如何排查使用 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 Command Line Interface(AWS CLI)访问串行控制台。

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

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

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

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

有关解决 Virtual Private Cloud(VPC)上的“connection timed out(连接超时)”错误的信息,请参阅如何排查来自互联网的 Amazon EC2 实例连接超时错误?

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

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

错误:“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 自动化文档以自动查找和纠正问题。有关更多信息,请参阅我在尝试使用 SSH 连接我的 EC2 实例时收到错误消息。如何使用 AWSSupport-TroubleshootSSH 自动化工作流来解决 SSH 连接问题?