尽管端口转发看起来没问题,但无法从局域网外部进行SSH连接。

运行Ubuntu 12.04,我已经设置了OpenSSH服务器。我可以在局域网内连接,但无法从外部连接。我正在使用与其他Ubuntu 12.04机器相同的sshd_config文件(这些机器位于不同的局域网)。 $ ssh 192.168.0.2可以正常工作,但是$ ssh 65.76.97.222(虚构的IP地址)无法工作。什么都没有发生。没有错误消息或任何提示。
感谢下面的评论,我已经通过网站canyouseeme.org和ShieldsUP验证了端口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

我允许任何用户连接,尤其是我的用户名。让我困惑的是,在其他机器上我从未遇到过这个问题,尽管它们在不同的局域网上。这个局域网只有一台电脑连接。有什么建议可以继续处理这个问题吗?

尝试使用详细选项(-v-vv,到 -vvv)获取有关连接的额外信息。例如,ssh -vvv -p 51555 65.76.97.222 - amc
请检查转发端口 http://www.canyouseeme.org/ - hwez
谢谢,我已根据您的评论修改了我的问题。 - DustByte
5个回答

检查您在SSH服务器上的网关是否设置为执行端口转发的路由器。
route -n
默认路由应该指向该路由器,否则,您将能够通过它发起连接,但ACK无法到达任何地方!

有几件事情需要你检查一下。
  1. 检查 /etc/ssh/sshd_config 文件,确保没有任何奇怪的 AllowUsers 条目。

  2. 指定您要连接的用户:

    ssh 用户名@服务器
    ssh 服务器 -l用户名
    
  3. 检查您的防火墙(iptables):

    sudo iptables -L --line-numbers
    sudo iptables -L -t nat --line-numbers
    

需要检查端口转发是否正常工作,通常我会通过访问https://www.grc.com/shieldsup > 点击 Proceed > 在框中输入端口号并点击 user specified custom port probe 来进行检查。这样可以告诉您该 TCP 端口是否确实对公众开放。

谢谢。我已根据您的建议编辑了我的问题。然而问题仍然存在。 - DustByte
哎呀,网络问题已经排除了,看起来是配置问题。尝试一下在/var/log/auth.log中使用grep sshd命令。 - meccooll
接下来,将以下内容添加到auth.log文件中:Jul 6 10:23:05 mymachine sshd[7871]: 未从65.76.97.222收到身份验证字符串 - DustByte

你在声明一个用户吗?
ssh Jimmy@65.76.97.222 -p51555
如果你按照你目前的方式使用这段代码,我相信它会默认使用当前用户名。
此外,你需要在目标系统上拥有一个具备权限的用户。在上面的例子中是"Jimmy"。

我确实有。我一直只与同一个用户连接,并且sshd_config允许任何用户连接。 - DustByte

尝试从不在网络上的计算机登录。我在智能手机上使用了一个SSH应用程序。起初,它不起作用,但后来我关闭了Wi-Fi,它按预期工作了。我的Web服务器也遇到了同样的问题。
这个问题与NAT回环有关。
许多路由器和一些安全工具会阻止回环连接作为安全功能。这意味着您本地网络上的计算机无法连接到同样位于本地网络上的机器的外部IP地址(例如208.112.93.73)。连接到同一台机器的本地IP地址(例如192.168.0.2)则可以正常工作。
请检查您的路由器是否具有“启用NAT回环”功能。