尝试访问EC2实例时超时的可能原因


102

我无法通过SSH进入实例-操作超时。可能是什么原因造成的,我该怎么解决?重新启动通常需要很长时间才能生效,并且可能只会使事情变得更糟

更新:这与权限无关-我通常可以正常登录。我怀疑可能是因为内存问题


3
您应该尝试serverfault.com,因为这实际上不是编程问题。
威廉

防火墙?SSH在那个端口上监听?
OMG Ponies,2010年

1
如果启动另一个实例,问题是否仍然存在?(这可能有助于进一步了解您的设置。)我更新了答案。
Jonik 2010年

首先ping DNS。如果失败,请在启动向导中配置入站/出站规则。配置所有流量和所有协议,并使用默认选项保存。使用本地系统再次ping通,然后可以正常工作。
少女

Answers:


67

您是否为实例设置了适当的安全组?即一种允许从您的网络访问实例上的端口22的端口。(默认情况下,不允许所有流量。)

更新:好的,不是安全组问题。但是,如果您从同一AMI启动另一个实例并尝试访问该实例,问题是否仍然存在?也许这个特定的EC2实例以某种方式随机地失败了–发生这种情况只是时间问题。(推荐阅读:云架构师:最佳实践(PDF),由Amazon Web服务宣传员Jinesh Varia撰写,特别是标题为“为失败而设计,不会失败”的一节。)


EC2 FAQ上的内容与此相同:developer.amazonwebservices.com/connect/…(此外ec2-authorize,您可以使用Elasticfox Firefox扩展程序轻松配置组。)
Jonik 2010年

1
我的天哪。。。在该组中打开SSH端口是如此基本,我不敢相信它不在这里:alestic.com/2009/08/ec2-connectivity。感谢您指出。
mtyson

哦,我完全忘记了安全组!谢谢!
安东尼奥·贝诺

91

我遇到了同样的问题,解决方案最终是将本地计算机的IP添加到活动安全组中的入站规则列表中。在下面的入站对话框中,在端口范围中输入22,在源字段中输入本地IP / 32,然后在下拉列表中保留“ custom tcp rule”。

在此处输入图片说明


6
按下“添加规则”按钮后,您还需要点击“应用规则更改”以使其生效。不要忘记这一点。它把我搞砸了好几次。
ted.strauss

非常感谢!
Hego555

完美的答案!我不再害怕被黑客攻击了:D
softvar

2
这对我有用,谢谢!由于某种原因..我的IP地址更改了,突然之间我无法ssh进入我的ec2实例。我只是添加了一条规则,而没有输入“自定义” IP地址,而是选择了“我的IP”和wala ...我可以ssh了!
rikkitikkitumbo

好答案!我发现来自AWS的故障排除也非常有用,它包含上面建议的要点。
J0ANMM

28

摧毁并重新创造

我有一个可用区域,可以连接,而另一个则不能。几个小时后,我感到非常沮丧,以至于删除了该可用区域中的所有内容。

重新构建所有内容,我必须确保创建所有内容。这包括:

  • 创建VPC
    • CIDR: 10.0.0.0/24
  • 创建Internet网关
  • Internet网关连接到VPC
  • 创建路由表
  • 路由添加到路由表
    • Destination: 0.0.0.0/0
    • Target: <Internet Gateway from earlier>
  • 创建子网
    • CIDR: 10.0.0.0/24
    • Routing Table: <Routing Table from earlier

我花了很多时间才弄明白这一切。我以我认为可能最有效的方式订购了这些步骤,但是您可能必须调整它们以使下一项可用。

建议

我并不是在建议您像我一样使用热核发电。我提供所有这些信息,以便您可以检查这些关联以确保您的关联正确。


6
这真的帮助了我!我遇到的情况是我的路由表没有指向互联网网关,这是唯一的问题。
EdgeCaseBerg,2015年

老实说,我在SO和github / gists中记录了这些事情,因为我知道当我需要在2个月内再次做时会踢自己。我希望它也能帮助其他人。但是最终,我只是一场自私的灾难。感谢您抽出宝贵时间发表评论,@ EdgeCaseBerg。
布鲁诺·布鲁诺斯基

2
感谢TON @BrunoBronosky。确实,如果“ Internet网关”如此重要,那么为什么默认的AWS文档中没有提及呢?:(
Anand

1
@BrunoBronosky谢谢!这正是阻止我连接到实例的原因。我将为我的未来保存这些步骤。
saiyancoder

21

这个答案是针对愚蠢的人(像我一样)。重新启动时,EC2的公共DNS可能会更改。如果您没有意识到这一点,并尝试通过SSH进入旧的公共DNS,则连接将停止并超时。这可能会导致您假设EC2或安全组有问题,或者...不,只是SSH进入新的DNS。并根据需要更新~/.ssh/config文件!


一个小时对我的超时问题进行故障排除,这就是解决方案。谢谢:)
埃里克·布朗

2
非常感谢@dslosky,您救了我的命。:)
A_01

13

要使用ssh进行连接,如下所示:

ssh -i keyname.pem username@xxx.xx.xxx.xx

keyname.pem您的私钥名称在哪里,username是您的OS发行版的正确用户名,并且xxx.xx.xxx.xx是公共IP地址。

超时或失败时,请检查以下内容:

安全组

确保对tcp端口22和所有ip或您的ip 都有入站规则。您可以在实例选项中通过ec2菜单找到安全组。

路由表

对于vpc中的新子网,您需要更改为将0.0.0.0/0指向Internet网关target的路由表。在vpc中创建子网时,默认情况下,它将分配默认路由表,该路由表可能不接受来自Internet的传入流量。您可以在vpc菜单中然后在子网中编辑路由表选项。

弹性IP

对于vpc中的实例,您需要分配一个公共弹性ip地址,并将其与该实例相关联。私有ip地址无法从外部访问。您可以在ec2菜单(而非实例菜单)中获得弹性IP。

用户名

确保您使用正确的用户名。它应该是一个ec2-userrootubuntu。如有必要,请全部尝试。

私钥

确保使用正确的私钥(启动实例时下载或选择的私钥)。似乎很明显,但是复制粘贴让我两次。


1
为此,我总是忘了在创建新的VPC时将0.0.0.0/0添加到Internet网关目标
Chathushka '17

7

您是否查看了实例的控制台输出?您可以通过AWS控制台执行此操作(“实例->右键单击实例->获取系统日志”)。我曾经遇到过EC2实例上的网络服务无法正确启动,导致SSH连接超时的情况。重新启动实例通常是固定的事情。


3

在此处输入图片说明

我找到2小时后

注意ssh ip 120.138.105.251/32

  • 不是aws实例IP地址

  • 这不是您的本地IP 127.0.0.1

  • 这不是您的本地IP localhost

但是但是但是

它是您尝试从其访问AWS实例的个人计算机的您的公共IP地址

  1. 转到https://www.whatismyip.com/ ssh中 放置的任何IP地址

如果您想完全打开SSH到所有IP地址 在此处输入图片说明

这是如何完全访问的元素-基本提示 在此处输入图片说明

这就是我在生产中使用的 在此处输入图片说明


2

以下是可能的问题:

  • 最可能的情况是,安全组配置不正确,无法在端口22上为您的ip提供SSH访问。安全设置的更改不需要重新启动服务器即可使其生效,但需要等待几分钟才能生效。适用。

  • 本地防火墙配置不允许SSH访问服务器。(您可以尝试使用其他Internet连接,您的手机/加密狗可以尝试)

  • 服务器未正确启动(即使在Amazon控制台上,访问检查也将失败),在这种情况下,您将需要停止并启动服务器。


就我而言,这是我从事的网络上的防火墙问题。使用VPN进行绕行是可行的。
MDave

1

在AWS文档上查看此帮助页面:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectionTimeout 您可能会在这里找到解决方案。对我来说,这部分解决了问题:

[EC2-VPC]检查子网的路由表。您需要一条路由,将发往VPC之外的所有流量发送到VPC的Internet网关。

  • 通过https://console.aws.amazon.com/vpc/打开Amazon VPC控制台。

  • 在导航窗格中,选择“ Internet网关”。验证是否有Internet网关连接到您的VPC。否则,请选择“创建Internet网关”并按照说明创建Internet网关,选择Internet网关,然后选择“附加到VPC”并按照说明将其附加到您的VPC。

  • 在导航窗格中,选择“子网”,然后选择您的子网。

  • 在“路由表”选项卡上,验证是否存在以0.0.0.0/0为目的地的路由,以VPC为目标的Internet网关。否则,选择路由表的ID(rtb-xxxxxxxx)导航到路由表的“路由”选项卡,选择“编辑”,“添加其他路由”,在“目标”中输入0.0.0.0/0,从“目标”中选择Internet网关,然后选择保存。

但是我建议您检查一下上面链接涵盖的所有选项,您可能会发现一个或多个问题。


1

我的问题-我为“我的IP”打开了端口22,并更改了Internet连接和IP地址更改。所以不得不改回去。


1

建立@ted.strauss答案后,您可以从下拉菜单中选择SSHMyIP,而无需导航到第三方站点。




0

还有一种可能性。AWS安全组设置为仅与特定的传入IP地址一起使用。如果以这种方式设置安全组,则您(或帐户持有人)将需要将IP地址添加到安全组。为此,请打开您的AWS仪表板,选择安全组,选择一个安全组,然后单击入站选项卡。然后根据需要添加您的IP。


0

我遇到了同样的问题,解决方案是允许从任何位置访问活动安全组中的入站规则列表。在入站对话框中,在源字段中任意位置的端口范围内输入22 ,然后在下拉列表中选择“ ssh”。

PS:这可能不是推荐的解决方案,因为这意味着可以从任何计算机上SSH该实例,但是我无法使其与我的本地IP一起使用。


0

当我使用没有密码的公共Wifi时,我遇到了类似的问题。将Internet连接切换到安全连接确实解决了问题。


0

如果SSH访问不适用于您的EC2实例,则需要检查:

  • 您实例的安全组允许入站 SSH访问(检查:查看规则)。

如果您使用的是VPC实例(您的实例已附加了VPC ID子网ID),请检查:

  1. 在VPC仪表板中,找到附加到VPC的二手子网ID。
  2. 检查其所附的路由表,该应具有0.0.0.0/0“目的地”和“ Internet网关”作为目标。

在Linux上,您还可以在实例的网络中的系统日志中检查路由信息,例如:

++++++++++++++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++++++++++++++
+--------+------+------------------------------+---------------+-------+-------------------+
| Device |  Up  |           Address            |      Mask     | Scope |     Hw-Address    |
+--------+------+------------------------------+---------------+-------+-------------------+
|   lo   | True |          127.0.0.1           |   255.0.0.0   |   .   |         .         |
|  eth0  | True |         172.30.2.226         | 255.255.255.0 |   .   | 0a:70:f3:2f:82:23 |
+--------+------+------------------------------+---------------+-------+-------------------+
++++++++++++++++++++++++++++Route IPv4 info+++++++++++++++++++++++++++++
+-------+-------------+------------+---------------+-----------+-------+
| Route | Destination |  Gateway   |    Genmask    | Interface | Flags |
+-------+-------------+------------+---------------+-----------+-------+
|   0   |   0.0.0.0   | 172.30.2.1 |    0.0.0.0    |    eth0   |   UG  |
|   1   |   10.0.3.0  |  0.0.0.0   | 255.255.255.0 |   lxcbr0  |   U   |
|   2   |  172.30.2.0 |  0.0.0.0   | 255.255.255.0 |    eth0   |   U   |
+-------+-------------+------------+---------------+-----------+-------+

其中UG标志显示你的互联网网关。

有关更多详细信息,请检查:在Amazon docs上对连接到实例进行故障排除


0

要为VPC子网中的实例启用从Internet的ssh访问,请执行以下操作:

  • 将Internet网关连接到您的VPC。
  • 确保子网的路由表指向Internet网关。
  • 确保子网中的实例具有全局唯一的IP地址(公用IPv4地址,弹性IP地址或IPv6地址)。
  • 确保您的网络访问控制(在VPC级别)和安全组规则(在ec2级别)允许相关流量往返于您的实例。确保同时为您的网络启用了公共IP地址。默认情况下,Network AcL允许所有入站和出站流量,除非另有明确配置

0

对我而言,它是托管在t2.micro linux EC2实例上的apache服务器,而不是EC2实例本身。

我通过以下方法解决了它:

sudo su

service httpd restart


0

我遇到了同样的问题,并通过向安全组添加规​​则解决了该问题

入站SSH 0.0.0.0/0

或者您只能添加您的IP地址


0

对我来说,那是我从启动卷中删除了所有内容。并且无法再连接到该实例。


0

第二天,当我尝试通过SSH进入我的实例时,它说-连接超时。

我试图浏览这篇文章,但没有任何效果。所以我做了 -

在“ Edit inbound rules从源”列中选择MY IP,它将自动以CIDR格式(XXX.XXX.XXX.XX/32)填充您的公共IP地址。

我尝试通过提供本地IP来尝试@ ted.strauss答案,但对我而言没有帮助。所以我选择了我的IP,它起作用了。

希望这对某人有帮助!


0

首先ping DNS。如果失败,请在启动向导中配置入站/出站规则。配置所有流量和所有协议,并使用默认选项保存。使用本地系统再次Ping,然后应该可以正常工作


0

如果您刚刚创建了一个新实例并且无法连接到该实例,那么我可以通过终止该实例并创建一个新实例来解决该问题。当然,只有当它是一个新实例并且您没有对其进行任何其他工作时,此方法才有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.