突然间,我的 SSH 客户端决定停止连接任何服务器(无论它是否是 SSH 服务器)并输出以下错误:
ssh: connect to host x.x.x.x port 22: Connection refused
请注意,这不是一个简单的设置错误。我完全知道我尝试连接的主机上运行着一个 SSH 服务器,以下情况可以证明这一点:
➜ ~ sudo nmap -sS 192.168.0.200
Password:
Starting Nmap 7.01 ( https://nmap.org ) at 2018-04-01 10:58 IST
Nmap scan report for 192.168.0.200
Host is up (0.0035s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh <========================
80/tcp open http
81/tcp open hosts2-ns
443/tcp open https
MAC Address: B8:27:EB:7C:24:64 (Raspberry Pi Foundation)
Nmap done: 1 IP address (1 host up) scanned in 0.47 seconds
我也可以成功地通过 telnet 进入它(没有“连接被拒绝”消息)
➜ ~ telnet 192.168.0.200 22
Trying 192.168.0.200...
Connected to 192.168.0.200.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4p1 Raspbian-10+deb9u2
然而...
➜ ~ ssh [email protected]
ssh: connect to host 192.168.0.200 port 22: Connection refused
这表明这不是我的服务器或我的机器本身的错误,而是 SSH 客户端的问题,因为它无法连接到明显打开的端口和 SSH 服务端口。有趣的是,它无法连接到任何地址,无论该地址是否可访问,这进一步让我认为这是我的 SSH 客户端的问题,而不是防火墙的问题:
➜ ~ ssh 1.1.1.1
ssh: connect to host 1.1.1.1 port 22: Connection refused
➜ ~ ssh 23.23.23.23
ssh: connect to host 23.23.23.23 port 22: Connection refused
➜ ~ ssh 232.221.231.3
ssh: connect to host 232.221.231.3 port 22: Connection refused
➜ ~ ssh 192.168.0.0
ssh: connect to host 192.168.0.0 port 22: Connection refused
➜ ~ ssh 123.123.0.1
ssh: connect to host 123.123.0.1 port 22: Connection refused
这怎么可能?SSH 甚至不尝试连接并声称“连接被拒绝”。罪魁祸首可能是什么?
附加信息:
➜ ~ uname -a
Darwin MacBook-Air.local 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64 x86_64
答案1
事实证明这是一个简单的解决方案。如果其他人也遇到这种情况,请考虑以下内容...
之前,我在 macOS 网络偏好设置 > 高级... > 代理 > SOCKS 代理中启用了 SOCKS 代理。它看起来像这样:
长话短说,该服务器不再运行,因此与环回的代理连接失败。Chrome、Telnet 和 Nmap 工作的原因是因为他们不遵守 macOS SOCKS 代理设置。任何真正遵守这些设置的应用程序(例如ssh
)都无法访问互联网,这就是 SSH 连接失败的原因。
我不能 100% 确定为什么 SSH 会显示“连接被拒绝”而不是一些通用的“无法访问”错误,但我知道 SOCKS 代理是原因。如果您遇到同样的情况,请尝试检查您的代理设置!