Amazon Elastic Compute Cloud
用户指南(适用于 Linux 实例)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

排查实例的连接问题

下面是在您尝试连接到实例时可能遇到的问题与错误消息。

有关 Windows 实例的更多帮助信息,请参阅Amazon EC2 用户指南(适用于 Windows 实例)中的排除 Windows 实例的故障

连接到您的实例时出错:连接超时

如果在连接到您的实例时看到以下错误消息:Network error: Connection timed outError connecting to [instance], reason: -> Connection timed out: connect,请尝试以下选项:

  • 检查您的安全组规则。您的某个安全组规则应该允许适当的端口传输来自公有 IPv4 地址的入站流量。

    1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

    2. 在导航窗格中,选择 Instances,然后选择您的实例。

    3. 在屏幕底部的 Description (描述) 选项卡中,在 Security groups (安全组) 旁,选择 view inbound rules (查看入站规则) 以显示对所选实例生效的规则列表。

    4. 对于 Linux 实例:当您选择 view inbound rules (查看入站规则) 时,将会出现一个窗口,其中显示了允许流量到哪些端口。验证是否有允许流量从您的计算机到端口 22 (SSH) 的规则。

      对于 Windows 实例:当您选择 view inbound rules (查看入站规则) 时,将会出现一个窗口,其中显示了允许流量到哪些端口。验证是否有允许流量从您的计算机到端口 3389 (RDP) 的规则。

      每次重新启动实例时,将分配新的 IP 地址(和主机名)。如果您的安全组具有允许来自单个 IP 地址的入站流量的规则,则当您的计算机在企业网络上,或当您通过 Internet 服务提供商 (ISP) 进行连接时,此地址可能不是静态的。请改为指定客户端计算机使用的 IP 地址的范围。如果您的安全组没有上一步中所述的允许入站流量的规则,请向您的安全组添加一个规则。有关更多信息,请参阅授权网络访问您的实例

      有关安全组规则的更多信息,请参阅Amazon VPC 用户指南中的安全组规则

  • 查看子网的路由表。您需要使用某个路由,以将发往 VPC 外部的所有流量发送到 VPC 的 Internet 网关。

    1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

    2. 在导航窗格中,选择 Instances,然后选择您的实例。

    3. Description 选项卡中,记下 VPC IDSubnet ID 的值。

    4. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

    5. 在导航窗格中,选择 Internet Gateways。验证是否有 Internet 网关附加到您的 VPC。否则,选择 Create Internet Gateway 以创建 Internet 网关。选择 Internet 网关,然后选择 Attach to VPC 并按照说明将其附加到您的 VPC。

    6. 在导航窗格中,选择 Subnets,然后选择您的子网。

    7. Route Table 选项卡上,验证 0.0.0.0/0 的路由是否为目的地以及您的 VPC 的 Internet 网关是否为目标。如果您使用实例的 IPv6 地址连接到实例,请检查是否有一个路由可以将所有 IPv6 流量 (::/0) 指向 Internet 网关。否则请执行以下操作:

      1. 选择路由表的 ID (rtb-xxxxxxxx) 以导航到路由表。

      2. Routes (路由) 选项卡上,选择 Edit routes (编辑路由)。选择 Add route (添加路由),将 0.0.0.0/0 用作目的地并将 Internet 网关用作目标。对于 IPv6,选择 Add route (添加路由),将 ::/0 用作目的地并将 Internet 网关用作目标。

      3. 选择 Save routes (保存路由)

  • 检查子网的网络访问控制列表 (ACL)。该网络 ACL 必须允许适当的端口传输来自本地 IP 地址的入站和出站流量。默认网络 ACL 允许所有入站和出站流量。

    1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

    2. 在导航窗格中,选择 Subnets,然后选择您的子网。

    3. Description (描述) 选项卡上,找到 Network ACL (网络 ACL),然后选择其 ID (acl-xxxxxxxx)。

    4. 选择网络 ACL。对于 Inbound Rules,验证规则是否允许来自您的计算机的流量。如果不允许,请删除或修改阻止来自您的计算机的流量的规则。

    5. 对于 Outbound Rules,验证规则是否允许到您的计算机的流量。如果不允许,请删除或修改阻止到您的计算机的流量的规则。

  • 如果您的计算机在企业网络上,请询问网络管理员内部防火墙是否允许端口 22 (对于 Linux 实例) 或端口 3389 (对于 Windows 实例) 上来自您的计算机的入站和出站流量。

    如果您的计算机有防火墙,请验证其是否允许端口 22 (对于 Linux 实例) 或端口 3389 (对于 Windows 实例) 上来自您的计算机的入站和出站流量。

  • 检查您的实例是否具有公有 IPv4 地址。如果没有,您可以将弹性 IP 地址与您的实例关联。有关更多信息,请参阅弹性 IP 地址

  • 检查实例上的 CPU 负载,服务器可能已超过负载。AWS 自动提供数据,例如 Amazon CloudWatch 指标和实例状态,您可以使用这些数据查看实例上 CPU 的负载情况;如有必要,还可以调整负载的处理方式。有关更多信息,请参阅使用 CloudWatch 监控您的实例

    • 如果您的负载是可变的,您可以使用 Auto ScalingElastic Load Balancing 自动增加或减少实例。

    • 如果您的负载呈稳定增长的态势,您可以迁移到更大的实例类型。有关更多信息,请参阅更改实例类型

要使用 IPv6 地址连接实例,请检查以下各项:

  • 您的子网必须与一个路由表关联,此表中具有一个将 IPv6 流量 (::/0) 指向 Internet 网关的路由。

  • 您的安全组规则必须允许适当端口 (Linux 的端口 22 和 Windows 的端口 3389) 传输来自本地 IPv6 地址的入站流量。

  • 您的网络 ACL 规则必须允许入站和出站 IPv6 流量。

  • 如果您从旧版 AMI 启动实例,则其可能未针对 DHCPv6 进行配置 (IPv6 地址不会在网络接口上自动识别)。有关更多信息,请参阅Amazon VPC 用户指南中的在实例中配置 IPv6

  • 您的本地计算机必须拥有 IPv6 地址,且必须配置为使用 IPv6。

错误:无法加载密钥...预期:任何私有密钥

如果您尝试连接到您的实例并收到错误消息 unable to load key ... Expecting: ANY PRIVATE KEY,则说明未正确配置用于存储私有密钥的文件。如果私有密钥文件以 .pem 为结尾,则它可能仍未正确配置。未正确配置私有密钥文件的一个可能原因是缺少证书。

如果未正确配置私有密钥文件,请按照下列步骤解决该错误

  1. 创建新的密钥对。有关更多信息,请参阅 使用 Amazon EC2 创建密钥对

  2. 将新密钥对添加到您的实例。有关更多信息,请参阅 丢失私有密钥时连接到 Linux 实例

  3. 使用新的密钥对连接到实例。

错误:服务器无法识别用户密钥

如果您使用 SSH 连接到实例

  • 请在连接时使用 ssh -vvv 获得三倍的详细调试信息:

    ssh -vvv -i [your key name].pem ec2-user@[public DNS address of your instance].compute-1.amazonaws.com

    下列样本输出演示了如果您尝试使用服务器无法识别的密钥连接实例时您可能会看到的信息:

    open/ANT/myusername/.ssh/known_hosts). debug2: bits set: 504/1024 debug1: ssh_rsa_verify: signature correct debug2: kex_derive_keys debug2: set_newkeys: mode 1 debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug2: set_newkeys: mode 0 debug1: SSH2_MSG_NEWKEYS received debug1: Roaming not allowed by server debug1: SSH2_MSG_SERVICE_REQUEST sent debug2: service_accept: ssh-userauth debug1: SSH2_MSG_SERVICE_ACCEPT received debug2: key: boguspem.pem ((nil)) debug1: Authentications that can continue: publickey debug3: start over, passed a different list publickey debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Trying private key: boguspem.pem debug1: read PEM private key done: type RSA debug3: sign_and_send_pubkey: RSA 9c:4c:bc:0c:d0:5c:c7:92:6c:8e:9b:16:e4:43:d8:b2 debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey debug2: we did not send a packet, disable method debug1: No more authentication methods to try. Permission denied (publickey).

如果您使用 PuTTY 连接到实例

  • 验证您的私有密钥 (.pem) 文件已经转换为 PuTTY (.ppk) 可以识别的格式。有关转换您的私有密钥的更多信息,请参阅 使用 PuTTY 从 Windows 连接到 Linux 实例

    注意

    在 PuTTYgen 中,加载您的私有密钥文件并选择 Save Private Key (保存私有密钥) 而不是 Generate (生成)

  • 验证您在连接时是否对为 AMI 使用了正确的用户名称。在 PuTTY Configuration (PuTTY 配置) 窗口的 Host name (主机名) 框中输入用户名。

    • 对于 Amazon Linux 2 或 Amazon Linux AMI,用户名称是 ec2-user

    • 对于 CentOS AMI,用户名称是 centos

    • 对于 Debian AMI,用户名称是 adminroot

    • 对于 Fedora AMI,用户名为 ec2-userfedora

    • 对于 RHEL AMI,用户名称是 ec2-userroot

    • 对于 SUSE AMI,用户名称是 ec2-userroot

    • 对于 Ubuntu AMI,用户名称是 ubuntu

    • 另外,如果 ec2-userroot 无法使用,请与 AMI 供应商核实。

  • 验证您的入站安全组规则允许入站流量进入合适的端口。有关更多信息,请参阅授权网络访问您的实例

错误:未找到主机密钥,权限被拒绝 (publickey),或者 身份验证失败,权限被拒绝

如果您使用 SSH 连接到实例并得到以下任一错误 Host key not found in [directory]Permission denied (publickey)Authentication failed, permission denied,请验证您使用了 AMI 的相应用户名称进行连接 已为实例指定正确的私有密钥 (.pem) 文件。

正确的用户名如下所示:

  • 对于 Amazon Linux 2 或 Amazon Linux AMI,用户名称是 ec2-user

  • 对于 CentOS AMI,用户名称是 centos

  • 对于 Debian AMI,用户名称是 adminroot

  • 对于 Fedora AMI,用户名为 ec2-userfedora

  • 对于 RHEL AMI,用户名称是 ec2-userroot

  • 对于 SUSE AMI,用户名称是 ec2-userroot

  • 对于 Ubuntu AMI,用户名称是 ubuntu

  • 另外,如果 ec2-userroot 无法使用,请与 AMI 供应商核实。

例如,要使用 SSH 客户端连接到从 Amazon Linux 实例,请使用以下命令:

ssh -i /path/my-key-pair.pem ec2-user@public-dns-hostname

请确认您使用的私有密钥文件对应于您启动实例时选择的密钥对。

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 选择实例。在 Description 选项卡上,验证 Key pair name 的值。

  3. 如果您启动实例时没有指定密钥对,则可以终止实例并启动新实例,从而确保指定密钥对。如果这是您一直使用的实例,但您不再有密钥对的 .pem 文件,则可以使用新的密钥对取代该密钥对。有关更多信息,请参阅丢失私有密钥时连接到 Linux 实例

如果您已经生成了您自己的密钥对,请确保您的密钥生成器被设置为创建 RSA 密钥。不接受 DSA 密钥。

如果您遇到 Permission denied (publickey) 错误但以上情况都不适用 (例如,您之前能够连接),则可能是实例主目录的权限发生了更改。/home/ec2-user/.ssh/authorized_keys 的权限必须限制为仅限所有者。

在您的实例上验证权限

  1. 停止您的实例并分离根卷。有关更多信息,请参阅 停止和启动您的实例将 Amazon EBS 卷与实例分离

  2. 在当前实例所在的可用区中启动一个临时实例 (使用与您用于当前实例的 AMI 类似或相同的 AMI),并将根卷附加到此临时实例。有关更多信息,请参阅 将 Amazon EBS 卷附加到实例

  3. 连接临时实例,创建一个挂载点并挂载您附加的卷。有关更多信息,请参阅 使 Amazon EBS 卷可在 Linux 上使用

  4. 在临时实例中,检查附加的卷的 /home/ec2-user/ 目录的权限。如有必要,按如下方式调整权限:

    [ec2-user ~]$ chmod 600 mount_point/home/ec2-user/.ssh/authorized_keys
    [ec2-user ~]$ chmod 700 mount_point/home/ec2-user/.ssh
    [ec2-user ~]$ chmod 700 mount_point/home/ec2-user
  5. 卸载该卷,将其与临时实例分离,然后将其重新附加到原来的实例。确保为根卷指定正确的设备名称;例如,/dev/xvda

  6. 启动您的实例。如果不再需要临时实例,可以终止它。

错误:未保护的私钥文件

必须保护您的私钥文件,防止其他任何用户对其进行读写操作。如果除您外其他任何人都能够读取或写入您的私钥,则 SSH 会忽略您的密钥,并且您会看到以下警告消息。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0777 for '.ssh/my_private_key.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: .ssh/my_private_key.pem Permission denied (publickey).

如果在尝试登录到您的实例时看到类似的消息,请检查此错误消息的第一行,验证您为实例使用的公钥是否正确。上述示例利用 .ssh/my_private_key.pem 文件权限使用私钥 0777,这可使任何人都能读取或写入此文件。此权限级别非常不安全,因此 SSH 会忽略此密钥。要修复此错误,请执行以下命令,替入您的私钥文件的路径。

[ec2-user ~]$ chmod 0400 .ssh/my_private_key.pem

错误:私有密钥的格式必须以“-----BEGIN RSA PRIVATE KEY-----”开头,以“-----END RSA PRIVATE KEY-----”结尾

如果您使用第三方工具(如 ssh-keygen)创建 RSA 密钥对,则它会生成 OpenSSH 密钥格式的私有密钥。当您连接到实例时,如果使用 OpenSSH 格式的私有密钥来解密密码,您将收到错误 Private key must begin with "-----BEGIN RSA PRIVATE KEY-----" and end with "-----END RSA PRIVATE KEY-----"

要解决该错误,私有密钥必须采用 PEM 格式。使用以下命令创建 PEM 格式的私有密钥:

ssh-keygen -m PEM

错误:服务器拒绝我们的密钥 没有支持的身份验证方法

如果您使用 PuTTY 连接到您的实例时收到以下任一错误:错误:服务器拒绝了我们的密钥错误:没有支持的身份验证方法,请验证在连接时是否为 AMI 使用了正确的用户名称。在 PuTTY Configuration (PuTTY 配置) 窗口的 User name (用户名) 中键入用户名。

正确的用户名如下所示:

  • 对于 Amazon Linux 2 或 Amazon Linux AMI,用户名称是 ec2-user

  • 对于 CentOS AMI,用户名称是 centos

  • 对于 Debian AMI,用户名称是 adminroot

  • 对于 Fedora AMI,用户名为 ec2-userfedora

  • 对于 RHEL AMI,用户名称是 ec2-userroot

  • 对于 SUSE AMI,用户名称是 ec2-userroot

  • 对于 Ubuntu AMI,用户名称是 ubuntu

  • 另外,如果 ec2-userroot 无法使用,请与 AMI 供应商核实。

您还应验证您的私有密钥 (.pem) 文件已经正确转换为 PuTTY (.ppk) 可以识别的格式。有关转换您的私有密钥的更多信息,请参阅 使用 PuTTY 从 Windows 连接到 Linux 实例

无法使用我的浏览器进行连接

Amazon EC2 控制台提供了一个选项,以使用 Java SSH 客户端直接从浏览器连接到实例。如果您的浏览器不支持 NPAPI,则在连接时您将看到在 Chrome 上弃用 NPAPI 的错误消息。该消息建议您使用其他浏览器。但是,这些浏览器的最新版本也不支持 NPAPI,因此您无法使用它们连接到您的实例,而必须选择其他方法连接到您的实例。

有关更多信息,请参阅以下资源:

无法对实例执行 Ping 操作

ping 命令是一种 ICMP 流量 — 如果您无法对实例执行 ping 操作,请确保您的入站安全组规则允许的 Echo Request 消息的 ICMP 流量来自所有资源,或来自从中发出命令的计算机或实例。如果您无法从实例发出 ping 命令,请确保您的出站安全组规则允许的 Echo Request 消息的 ICMP 流量发送到所有目标,或发送到您正在尝试对其执行 ping 操作的主机。

错误:服务器意外关闭了网络连接

如果您使用 Putty 连接到您的实例并接收到错误“服务器意外关闭了网络连接”,则请确认您已在 Putty 配置的“Connection”(连接) 页上启用 keepalives 以避免断开连接。有些服务器如果在指定的时间内未接收到任何数据,将会断开与客户端的连接。将“Seconds between keepalives”(keepalives 之间的秒数) 设置为 59 秒。

如果在启用 keepalives 之后仍然出现问题,请尝试在 Putty 配置的“Connection”(连接) 页上禁用 Nagle 的算法。