ssh - 无法从 LAN 通过 SSH 访问我的 Amazon EC2 实例,我认为该实例阻塞了端口 22

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

我知道通过 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 连接到它,就会很棘手。

但是,如果您要启动一个新实例,可以在启动时对其进行自定义。

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

如果第一行以 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,例如,这将允许您使用点对点隧道协议(protocol)隧道进入服务器......但是,要使 PPTP 在 EC2 中工作,您必须在 VPC 中启动实例,因为经典 EC2 安全组仅允许 TCP、UDP 和 ICMP。要使 PPTP 正常工作,您必须能够打开实例的所有协议(protocol) - PPTP 需要 Generic Route Encapsulation (GRE)协议(protocol)以传输隧道数据。 GRE 是 IP,但它既不是 TCP 也不是 UDP,因此无法在 Classic EC2 中使用它。

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

关于ssh - 无法从 LAN 通过 SSH 访问我的 Amazon EC2 实例,我认为该实例阻塞了端口 22,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933115/

相关文章:

amazon-web-services - rsa公钥没有这样的文件或目录?

php - 无论如何我都无法处理 SSH 连接错误

linux - 从shell脚本在另一台linux服务器上远程执行命令

amazon-web-services - CloudFormation Elasticsearch 服务 - 资源之间对同一资源的循环依赖

node.js - 在 Debian 6 上安装 nodejs

mysql - Amazon EC2 MySQL 启动失败

ssh - 导致 SSH 超时(客户端)

ssl - 多个图像请求的 Amazon ssl 效率

regex - CloudFormation 参数动态正则表达式

java - AWS SDK 示例错误