无法从局域网SSH进入我的Amazon EC2实例,我认为它阻止端口22

时间:2013-07-29 20:01:17

标签: ssh amazon-web-services amazon-ec2 instance firewall

我知道ssh进入EC2实例的步骤。但我认为我的大学防火墙阻塞了22号港口。

有没有办法在不请求管理员的情况下连接到我的实例?

我能做些什么来弄清楚什么阻碍了我?

2 个答案:

答案 0 :(得分:2)

正如所建议的那样,在评论中,您应该验证问题是在近端还是远端。 tcptraceroute实用程序是适用于此的工具。

$ sudo tcptraceroute hostname_or_ip 22

尝试建立到目标端口的TCP连接(22),但将IP生存时间(TTL)标志设置为人为的低值(从1开始,然后递增1)以提示每个路由器连接尝试遭遇将数据包拒绝给您,因为它基本上断定数据包已通过太多路由器而不应再转发。

这并不总是正常工作(由于某些网络硬件中不兼容的IP堆栈),因此很好地测试该工具是否对您的位置有用:

$ sudo tcptraceroute google.com 80

如果您在此请求中获得了有效的跟踪内容,那么您可以非常自信地确认SSH测试的有效性。

还有其他方法可以隧道连接到ec2实例或将其配置为侦听另一个端口,但如果您被本地LAN阻止,您可能会发现这些方法也被阻止......并且,重新配置您的实例如果你不能通过SSH连接它将会很棘手。

但是,如果您正在启动一个新实例,则可以在启动时自定义它。

您在启动实例时在AWS控制台中看到的EC2 User Data窗口使您有机会在实例首次启动时运行自定义脚本。

如果第一行以shebang(#!)开头,则EC2假定它是一个shell脚本。使用#!/ bin / bash启动此文件,其余部分将在首次启动时执行。您可以使用它来调整/etc/ssh/sshd_config,例如,配置sshd以侦听22以外的端口(例如,2222),然后重新启动sshd。这可以通过在用户数据中包含类似的内容来实现。

#!/bin/bash

/usr/bin/perl -pi -e 's/^Port\s+22$/Port 2222/' /etc/ssh/sshd_config
/usr/sbin/service sshd restart

如果有帮助,sshd服务将侦听端口2222而不是端口22。

您也可以发挥创意并使用此功能来安装和配置pptpd,例如,这将允许您使用点对点隧道协议隧道进入服务器...但是,PPTP可以在EC2中工作,您必须在VPC中启动实例,因为Classic EC2安全组仅允许TCP,UDP和ICMP。要使PPTP正常工作,您必须能够为您的实例打开所有协议 - PPTP需要Generic Route Encapsulation (GRE)协议才能传输您的隧道数据。 GRE是IP,但既不是TCP也不是UDP,所以不能在Classic EC2中使用它。

此外,iirc,用户数据技巧仅在最初启动实例时有效。

答案 1 :(得分:2)

要测试您的大学防火墙是否阻止TCP 22,请尝试www.ismyportblocked.com

IsMyPortBlocked测试可能被防火墙过滤/阻止的阻止的OUTBOUND端口。