我知道通过 ssh 进入 EC2 实例的步骤。但我认为我的大学防火墙阻止了 22 端口。
有什么方法可以在不请求管理员的情况下连接到我的实例?
我该怎么做才能弄清楚是什么阻碍了我?
我知道通过 ssh 进入 EC2 实例的步骤。但我认为我的大学防火墙阻止了 22 端口。
有什么方法可以在不请求管理员的情况下连接到我的实例?
我该怎么做才能弄清楚是什么阻碍了我?
正如建议的那样,在评论中,您应该验证问题是在近端还是远端。该tcptraceroute
实用程序是一个合适的工具。
$ sudo tcptraceroute hostname_or_ip 22
这会尝试建立到目标端口 (22) 的 TCP 连接,但将 IP 生存时间 (TTL) 标志设置为人为的低值(从 1 开始,然后递增 1)以提示您的连接尝试遇到的每个路由器拒绝返回给您的数据包,因为它基本上得出结论,该数据包已通过太多路由器并且不应再转发。
这并不总是能正常工作(由于某些网络硬件中的 IP 堆栈不兼容),因此可以很好地测试该工具在您所在位置是否有用:
$ sudo tcptraceroute google.com 80
如果您在此请求上获得了看似有效的跟踪信息,那么您可以对 SSH 测试的有效性充满信心。
还有其他方法可以隧道到 ec2 实例或将其配置为侦听另一个端口,但如果您被本地 LAN 阻止,您可能会发现这些方法也被阻止......并且,重新配置您的实例将很棘手如果您无法通过 SSH 访问它。
但是,如果您正在启动一个新实例,则有一种方法可以在它启动时对其进行自定义。
您在启动实例时在 AWS 控制台中看到的 EC2用户数据窗口让您有机会在实例首次启动时运行自定义脚本。
如果第一行以 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,例如,这将允许您使用点对点隧道协议隧道进入服务器......但是,要在 EC2 中工作 PPTP,您必须在 VPC 中启动实例,因为 Classic EC2 安全组仅允许 TCP、UDP 和 ICMP。要使 PPTP 工作,您必须能够为您的实例打开所有协议 - PPTP 需要通用路由封装 (GRE)协议才能传输您的隧道数据。GRE 是 IP,但它既不是 TCP 也不是 UDP,因此无法在 Classic EC2 中使用它。
此外,iirc,用户数据技巧仅在实例最初启动时才有效。
要测试您的大学防火墙是否阻止 TCP 22,请尝试www.ismyportblocked.com
IsMyPortBlocked 测试可能被防火墙过滤/阻止的被阻止的 OUTBOUND 端口。