使用 AWS EC2
从远程计算机发起到 AWS 的反向 SSH 隧道:
/usr/bin/autossh -M 0 -N -R 19999:localhost:22 [email protected] -v -i cloud.pem
在 AWS 安全组中添加了端口 19999。
检查是否可以通过 telnet 连接到 AWS:
telnet: Unable to connect to remote host: Connection refused
但是,如果我删除安全组中的端口 19999,我会得到不同的响应:
telnet: Unable to connect to remote host: Connection timed out
因此我认为问题出在 AWS 主机上,而不是另一台机器的防火墙上。
然后我检查sshd
隧道是否已在 AWS 端启动,以响应我的连接。
netstat
表明服务正在监听:
tcp 0 0 127.0.0.1:19999
sshd
但我仍然收到“连接被拒绝”消息。我还能分析什么?我在 AWS 机器上找不到任何日志。/var/log/secure
不记录这些失败的连接尝试。
答案1
据我了解,您希望建立一个到 EC2 实例的反向隧道,然后允许外部客户端连接到指定的端口 19999。
首先,当您运行所提供的命令时,您可以通过 netstat 看到端口正在监听环回接口,因此为了使这个命令对外部起作用,您需要像这样在前面加上绑定地址:
/usr/bin/autossh -M 0 -N -R 0.0.0.0:19999:localhost:22 [email protected] -v -i cloud.pem
这仍然会给您带来错误,所以接下来您实际上要寻找的是在 EC2 上运行的 sshd 服务器中启用的 GatewayPorts 指令。
你应该编辑/etc/ssh/sshd_config并确保您拥有:
GatewayPorts clientspecified
在配置中定义。重新启动 sshd 服务器并使用上面提供的命令。有关此内容的更详细说明,请参见:使用反向 SSH 端口转发绕过公司防火墙