最近我尝试将我的 Ubuntu 14.04 台式计算机(我将其称为“计算机 A”)设置为 ssh 服务器,以便我可以从我的笔记本电脑远程访问它(我将其称为“计算机 B”)。我安装了 openssh-server,到目前为止还没有修改 /etc/ssh/sshd_config 文件。
问题是,我相信我正确设置了所有内容,尽管我可以在同一网络中使用路由器上计算机 A 的永久内部 IP 地址通过 ssh 从计算机 B 访问计算机 A(也可以通过计算机 A 中的本地主机):
ssh [email protected]
我无法使用外部 IP 地址访问计算机 A,如下所示:
ssh -vvv username@the-external-ip-adress
过了一会儿,我得到:
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to the-external-ip-adress [the-external-ip-adress] port 22.
debug1: connect to address the-external-ip-adress port 22: Connection timed out
ssh: connect to host the-external-ip-adress port 22: Connection timed out
我尝试通过网络内部和外部的外部地址进行连接。这个地址是我在 canyouseeme.org 并通过谷歌搜索找到的。我还使用了我的 IP 和端口 22 的 canyouseeme.org,这是我的 sshd_config 默认指定的端口,并且还发现由于连接超时而无法访问该服务。
我几乎检查了每个论坛并发布了有关类似问题的帖子,有时似乎是完全相同的问题,但没有找到解决方案。根据我所阅读的所有内容,我提供了有关或可能相关的路由器配置(端口转发等)信息的屏幕截图。
我也:
- 在我的防火墙上启用了端口 22(“sudo ufw allow 22”)
- 已尝试禁用防火墙
- 已尝试重新启用防火墙
- 已尝试禁用路由器的防火墙
- 已尝试重新启用路由器的防火墙
- 已尝试将端口添加到 iptables(“sudo iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT”)
- 发现 /var/log/auth.log 只有本地记录
- 发现 /var/log/daemon.log 为空
- 尝试过 100% 丢包的 ping
- 已重新启动计算机 A
- 已重启路由器
- 已检查 /etc/ssh/sshd_config 文件中的访问限制,但未找到任何限制。
有什么建议么?请记住,我可以完美地 ssh 到计算机 A 并在网络内使用它,并使用计算机 A 的 IP 本地地址,以及计算机 A 内的 localhost。据我了解,这表明没有任何问题电脑A的ssh服务器配置。但我可能错了。
更新:我最近还注意到IP(外部IP)不断变化(经过很长时间),当然我总是尝试连接到当前IP。拥有一个非静态 IP 可以做些什么吗?
问题在于 Internet 服务提供商不允许我正确进行端口转发。我更换了供应商并解决了问题。
您的无线 ISP 也可能阻止 ssh 流量和/或到路由器的流量。-vvvv 选项可以涉及客户端和服务器上请求的调试数据。-d 选项对于对守护进程进行故障排除很有用。如果您查看 sshd 的联机帮助页,它就在那里。因此,停止正常的 sshd(服务停止)并手动运行它 - sudo /usr/sbin/sshd -d 然后在您尝试从另一个盒子连接时观察调试输出。可能想要将输出发送到日志文件 - 输出到 stderr,而不仅仅是 stdout,因此需要进行任何重定向。
您应该检查您的网络配置文件中是否定义了网关。