运行 Ubuntu 12.04,我设置了 OpenSSH 服务器。我可以从 LAN 内部连接,但不能从外部连接。我使用的sshd_config
文件与我的其他 Ubuntu 12.04 机器(位于不同的 LAN 中)上的文件相同。
$ ssh 192.168.0.2
工作正常,但是
$ ssh 65.76.97.222
(虚构的 IP 地址)不起作用。什么都没发生。没有错误消息,什么都没有。提示就在那里。
感谢以下评论,我已设法通过网站进行验证canyouseeme.org和盾牌UP端口 22 确实已打开。
使用选项-vvv
,我得到以下结果:
$ ssh -vvv 65.76.97.222
OpenSSH_5.9p1 Debian-5ubuntu1.4, OpenSSL 1.0.1 14 Mar 2012
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 65.76.97.222 [65.76.97.222] port 22.
debug1: Connection established.
debug1: identity file /home/myname/.ssh/id_rsa type -1
debug1: identity file /home/myname/.ssh/id_rsa-cert type -1
debug1: identity file /home/myname/.ssh/id_dsa type -1
debug1: identity file /home/myname/.ssh/id_dsa-cert type -1
debug1: identity file /home/myname/.ssh/id_ecdsa type -1
debug1: identity file /home/myname/.ssh/id_ecdsa-cert type -1
然后提示就停留在那里。
进一步的调试信息来自var/log/auth.log
:
$ grep sshd /var/log/auth.log
[cutting old lines...]
Jul 6 10:23:05 mymachine sshd[7871]: Did not receive identification string from 65.76.97.222
我允许任何用户连接,特别是我自己的用户名。让我困惑的是,我在其他机器上没有遇到过这个问题,尽管它们在不同的局域网上。这个局域网只有一台计算机与之相连。有什么想法可以继续吗?
答案1
检查 SSH 服务器上的网关是否设置为执行端口转发的路由器。
route -n
默认路由应该指回该路由器,否则,您将能够通过它发起连接,但 ACK 将不会去任何地方!
答案2
有几件事需要你检查。
检查
/etc/ssh/sshd_config
并确保您没有任何有趣的AllowUsers
条目。指定您想要连接的用户:
ssh USER@SERVER ssh SERVER -lUSER
检查你的防火墙(
iptables
):sudo iptables -L --line-numbers sudo iptables -L -t nat --line-numbers
答案3
需要检查端口转发是否正常工作,我通常会通过以下方式进行检查https://www.grc.com/shieldsup> 继续 > 在框中输入您的端口号,然后单击用户指定的自定义端口探测。这应该会告诉您该 TCP 端口是否确实向公众开放
答案4
尝试从未连接到网络的计算机登录。我使用智能手机上的 SSH 应用程序。起初,它不起作用,但后来我关闭了 wifi,它就正常工作了。我的网络服务器也遇到了同样的问题。
该问题与 NAT 环回有关。
许多路由器和一些安全工具都以安全功能阻止环回连接。这意味着本地网络上的计算机无法连接到本地网络上的计算机的外部 IP 地址(例如 208.112.93.73)。连接到同一台计算机的本地 IP 地址(例如 192.168.0.2)则没有问题。
检查您的路由器是否具有“启用 NAT 环回”功能。