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 实例时出现的“Connection refused”(连接被拒绝)或“Connection timed out”(连接超时)错误?
当我使用 SSH 连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例时,我收到“Connection refused”(连接被拒绝)或“Connection timed out”(连接超时)错误。
简短描述
如果您的连接超时,则您会收到来自 SSH 客户端的以下错误消息:
“ssh:连接到主机 ec2-X-X-X-X.compute-1.amazonaws.com port 22: 连接超时”
当服务器未响应客户端,且客户端程序放弃(超时)时,将会出现 Connection timed out(连接超时)错误。
如果主机远程拒绝您的连接,则您会收到以下错误消息:
“ssh:连接到主机 ec2-X-X-X-X.compute-1.amazonaws.com port 22: 连接被拒绝”
解决方法
“Connection timed out”(连接超时)错误
如果您收到 Connection timed out(连接超时)错误,请验证以下配置:
- 实例的 IP 地址或主机名正确。
- 实例通过了其运行状况检查。
- 实例的安全组允许 TCP 端口 22 上的入站流量。
- 实例子网的网络访问控制列表(网络 ACL)允许 TCP 端口 22 上的入站流量和临时端口上的出站流量。
- 实例子网的路由表提供实例和 SSH 客户端之间的连接。
- 不存在阻止 SSH 客户端和实例之间的连接的防火墙。
- 实例的 TCP 包装器不会阻止 SSH。有关详细信息,请参阅 Red Hat 网站上的 2.6.2.TCP Wrappers configuration files。
**注意:**要检查防火墙或 TCP 包装器是否存在问题,您必须拥有实例的操作系统 (OS) 访问权限。
“Connection refused”(连接被拒绝)错误
如果您收到 Connection refused(连接被拒绝)错误,请验证以下配置:
- 实例上不存在阻止 SSH 连接的防火墙。
- SSH 进程守护程序 (sshd) 正在端口 22 上运行并侦听。
**注意:**要检查上述配置,您必须拥有实例的操作系统级访问权限。
对通过两项运行状况检查的实例的问题进行故障排除
要对通过运行状况检查的实例的问题进行故障排除,请使用以下故障排除方法之一。
运行 AWSSupport-TroubleshootSSH 运行手册
最佳做法是运行 AWSSupport-TroubleshootSSH 自动化运行手册。该运行手册会在您的实例上安装 Amazon EC2Rescue 工具,以识别并修复阻止远程 SSH 连接到 Linux 主机的问题。
使用适用于 Linux 的 EC2 Serial Console
使用适用于 Linux 的 EC2 Serial Console 对受支持的实例类型上的操作系统级问题进行故障排除,例如启动问题、网络配置问题以及 SSH 配置问题。
先决条件:
- 在 AWS 账户级别授予对控制台的访问权限。
- 创建 AWS Identity and Access Management (IAM) 策略,以向您的 IAM 用户授予控制台访问权限。
**注意:**使用 EC2 Serial Console 的每个实例必须至少拥有一个具有 sudo 访问权限且使用密码的 Linux 用户。
有关详细信息,请参阅 Configure access to the EC2 Serial Console。
如果 Linux 账户未配置登录密码,则您必须运行 ssm-user,为具有 sudo 访问权限的账户重置密码。
要确认您的配置不会阻止 SSH 访问,请完成以下步骤:
-
如果您配置了 iptables 规则,请运行以下命令在 iptables 中添加一条规则,以接受端口 22 上的所有 SSH 连接:
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT -
如果您使用基于操作系统的防火墙,请将其停用。最佳做法是使用安全组而不是防火墙。要停用基于操作系统的防火墙,请根据您的操作系统运行以下命令。
**重要事项:**以下命令将清除所有主要的 iptables 规则并删除现有规则。这些命令还会添加允许入站 SSH 连接的规则,并将主链的默认策略更改为 ACCEPT。此配置可确保您在清除 iptables 规则时不会影响实例网络连接。
使用 UFW 的发行版,例如 Ubuntu 和 Debian:sudo iptables -F$ sudo iptables -P INPUT ACCEPT sudo ufw disable使用防火墙的发行版,例如 Red Hat Enterprise Linux (RHEL) 和 CentOS:
sudo iptables -F $ sudo iptables -P INPUT ACCEPT sudo systemctl disable firewalld**注意:**重新获得对实例的访问权限后,请检查您的防火墙配置。
-
要验证 SSH 是否正在运行以及 SSH TCP 端口 22 是否处于侦听状态,请运行以下命令:
sudo systemctl restart sshd$ sudo ss -tpln | grep -iE '22|ssh'LISTEN 0 128 *:22 *:* users:(("sshd",pid=1901,fd=3)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1901,fd=4))**注意:**如果您的系统没有 ss 命令,请使用传统的 netstat 命令替代 ss。确保使用与上述命令相同的语法。
-
要确保 TCP 包装器不会阻止 SSH 连接,请运行以下命令:
if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\ then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
使用 Systems Manager
先决条件:要使用会话管理器(AWS Systems Manager 的一项功能),您的实例必须为托管节点。该实例的 AWS Systems Manager Agent (SSM Agent) ping 状态必须为在线,且附加的 IAM 角色必须具有 AmazonSSMManagedInstanceCore 权限。确保遵守所有会话管理器先决条件。
使用会话管理器启动会话以访问实例。
使用用户数据脚本
如果您无法使用上述故障排除方法,请使用用户数据脚本停用操作系统级防火墙和 TCP 包装器。然后,重新启动 sshd 服务。
**重要事项:**在停止并启动实例之前,请执行以下操作:
- 创建您的 Amazon Elastic Block Store (Amazon EBS) 卷的备份。
**注意:**如果您的实例是由实例存储支持,或者具有包含数据的实例存储卷,则 Amazon EC2 会在实例停止时删除这些数据。 - 完成解决步骤后,暂时将该实例从其 Amazon EC2 Auto Scaling 组中移除。
**注意:**如果您停止 EC2 Auto Scaling 组中的实例,则可以根据缩容保护设置终止该实例。使用 Amazon EMR、AWS CloudFormation 或 AWS Elastic Beanstalk 启动的实例可能位于 Auto Scaling 组中。 - 将实例关闭行为设置为 Stop(停止),以确保实例在您停止时不会终止。
**注意:**当停止并启动某个实例时,该实例的公共 IP 地址将发生变化。最佳做法是使用弹性 IP 地址而不是公共 IP 地址将外部流量路由到您的实例。
要为实例配置用户数据,请完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格中,选择 Instances(实例),然后选择您的实例。
- 停止实例。
- 选择 Actions(操作),然后选择 Instance settings(实例设置)。
- 选择 Edit user data(编辑用户数据),然后输入以下用户数据脚本:
**注意:**上述用户数据脚本设置为在实例每次重新启动时运行。此方法会删除所有主要的 iptables 规则。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 iptables -P INPUT ACCEPT iptables -F systemctl restart sshd.service || service sshd restart if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\ then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi --// - 选择 Save(保存)。
- 使用 SSH 连接到实例。
- 在重新获得对实例的访问权限后,请删除用户数据脚本,然后验证您的防火墙配置是否准确。
相关信息
如何解决来自互联网的 Amazon EC2 实例连接超时错误?
- 语言
- 中文 (简体)

