AWS ssh访问“端口22:操作超时”问题

23

我一天之内无法访问AWS EC2实例。
(AMI:ubuntu/images/ebs/ubuntu-precise-12.04-amd64-server-20121001 (ami-22ad1223))

$ ssh -v -i mykey.pem ubuntu@XXX.XXX.XXX.XXX
OpenSSH_5.9p1, OpenSSL 0.9.8x 10 May 2012
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to xxx.xxx.xxx.xxx [xxx.xxx.xxx.xxx] port 22.
debug1: connect to address xxx.xxx.xxx.xxx port 22: Operation timed out
ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed out

这是我在EC2中的“安全组”设置。
自从我有良好的连接以来,我并没有更改过这个设置。

Ports  Protocol  Source
22      tcp     0.0.0.0/0
80      tcp     0.0.0.0/0
3000    tcp     0.0.0.0/0
3006    tcp     0.0.0.0/0
我尝试了很多次重新启动服务器。
Web服务器运行良好。但是SSH连接不正常。

可能是什么问题,如何使其正常工作?


如果您重新启动了它,您是否使用当前的IP地址? - datasage
您在安全组上配置了出站规则吗? - Stefan Thorpe
如果连接不是从服务器发起的,出站规则不会阻止通信。但网络 ACL 规则可能会阻止它。 - Adam Ocsvari
在我的情况下,我启用了Nginx,这阻止了我的ssh连接。 - Abdulmoiz Ahmer
15个回答

16

我的常规检查清单:

  • AWS控制台:实例是否正常运行?
  • 它是否在公共子网中?
  • 它是否有公共IP?
  • VPC是否有关联的Internet网关?
  • 它是否具备到Internet网关的路由表?(附加到子网)
  • 网络ACL规则是否默认?
  • 安全组是否允许ping?如果是,请测试ping功能是否正常?
  • 安全组是否允许入站SSH连接?

如果仍然没有线索,则启动一个新实例(从基础AMI),在同一VPC中进行连接。如果连接成功,请尝试从该实例进行ssh连接。


3
这个清单真的很不错!如果你跟我一样,一切都完美无缺(但仍然无法连接),尝试更换互联网服务提供商。我不得不断开家庭 WiFi,然后使用手机热点连接到互联网,然后我就能成功地 SSH 进入我的 EC2 实例了。有趣的是,然后我又能切换回家庭 WiFi,突然 SSH 就可以工作了,所以我不必继续使用热点。 - chemturion
1
我还要补充一点:“你的实例是否被CPU积分限制了?” 结果是一样的:SSH超时。 - ivarec

13

我也遇到了同样的问题。实际上,我误删了默认的互联网网关。

  1. 前往VPC并从左侧菜单中选择“互联网网关”。
  2. 点击“创建互联网网关”按钮并提供名称标记(任何名称 - 可选)并单击创建。
  3. 默认情况下,它未附加。因此,单击操作下拉菜单并选择“附加到VPC”,然后将其与默认VPC附加。
  4. 现在进入“路由表”,选择默认路由表,并通过“路由”选项卡下的“编辑路由”按钮编辑路由。
  5. 然后在目标文本框中提供“0.0.0.0/0”,并在目标中选择新创建的互联网网关(以igw-alphanumeric开头),然后保存路由。

现在您应该能够SSH EC2实例了。


这正是我的情况,唯一的问题是我在意外发现互联网网关未与路由表关联之后就看到了你的答案!无论如何,还是谢谢你! - Burak Karakuş

5
对于像我这样的AWS新手,请记住,如果您重新启动或停止/启动实例,则主机名可能会更改。因此,请确保每次ssh时使用正确的主机名-在实例描述中可见。

3
如果发生了“一天之内”无法访问AWS EC2实例的情况,那么可能是该实例关联的IP被屏蔽了。

如果IP被屏蔽,您需要添加一个新的动态IP,并将这个新的动态IP与您的AWS EC2实例关联起来。步骤如下:
1. 进入“弹性IP”。
2. 分配新地址。
3. 选择这个新地址,点击“操作”和“关联地址”。
4. 选择您的实例,然后点击“关联”。

在我的案例中,将新的动态IP添加到我的AWS EC2实例中解决了问题。(我的问题是我从某一天开始无法访问AWS EC2实例)

非常感谢,我花了几乎整天的时间进行研究和尝试不同的方法,而这解决了我的问题。 - Shender Ramos

3
请创建一个新的安全组,并选择SSH类型。
SSH TCP 22 0.0.0.0/0
参考图片:enter image description here

2
除了Adam的回答之外,还要检查您的公共子网的RT表是否使用IGW,以及私有子网的RT表是否具有0.0.0.0/0-> NAT实例ID。

1

请确认您正在连接到公共动态IP或关联ElasticIP并连接到它。


我有完全相同的问题。即使设置了ElasticIP,我仍然遇到同样的问题。我检查了我的防火墙,它在我的本地机器上没有开启。我还应该检查什么以确保呢?顺便说一下,我来自马来西亚,我的服务器位于俄勒冈州。这可能是问题所在吗? - sooon

1
如果以上的故障排除步骤都无法解决问题,确保您的 EC2 容器符合您在容器上运行的应用程序的所有系统要求。如果内存在到达 SSH 服务之前耗尽,则有时无法启动 SSH。
例如:我最初启动 EC2 容器时可以完全通过 SSH 进入它。然后我继续安装 Mailcow。在重启容器后,我的 SSH 问题出现了,因为我安装的应用程序需要大量的服务,例如 Docker。阅读 Mailcow 的系统要求后,我意识到 t2.micro 远远不足以运行所有内容。我更改为 t3.large,一切都正常工作。
即使做了这么长时间,有时候也会忘记最基本的步骤和要求。

0
我在图书馆使用公共WiFi时无法连接,后来当我切换到我的移动热点WiFi(受密码保护)时才知道这一点。请尝试切换到一个受保护的网络。

0

我也遇到了同样的问题,很高兴知道我没有被路由表拒绝。

检查与 EC2 实例相关联的内容

并尝试以下步骤

  1. 子网、路由表和允许的 CIDR 块
  2. 与 EC2 实例关联的密钥对
  3. 安全组是否允许 ssh 端口 22。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接