今天早上醒来,发现Mac自动安装了最新版的macOS,也就是Catalina 10.15.4。上午用着挺好,没什么异常。下午登录服务器,发现无法连接。用”-v”选项查看ssh连接调试信息,到”connecting”就不动了:

OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/tlanyan/.ssh/config
debug1: /Users/tlanyan/.ssh/config line 20: Applying options for node1
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug1: Connecting to node1 port 12345

上网查了一下,几天前就有人遇到这个问题。本人升级新系统较晚,因此今日才发现。

经过本人组合测验,终于找到问题原因所在,本文给出macOS 10.15.4 ssh无法连接解决办法。

ssh无法连接解决办法

遇到同样问题又不想看废话的网友,请打开终端安装 openssh 以解决该问题:

# 未安装brew请先安装:
# bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install openssh

安装完后,打开一个新窗口,ssh -V 应该输出如下:

OpenSSH_8.2p1, OpenSSL 1.1.1f 31 Mar 2020

再用ssh连接服务器,问题已经解决。

解决历程

刚发现ssh无法连接到服务器,心里一凉:服务器上托管着网站,不会服务器挂了吧?转念一想觉得不可能,网站有监控呢,挂了肯定会报警。浏览器打开网站,一切正常。但是返回iTerm2用ssh连接服务器,还是不通。尝试其他几个服务器,情况一样。

想着会不会是设置了代理的问题?关掉代理软件,果然ssh正常连接到服务器。但不用代理软件是不可能的,为了找出原因并解决,陆续做了如下尝试:

  • 分别用iTerm2和系统自带终端,都不能连接,说明不是iTerm2的问题;
  • 查看环境变量,确认没有设置http_proxy等影响工作的环境变量;
  • 切换zsh和bash,问题依旧,说明和shell没关系;
  • 切换代理软件PAC和全局模式,全局模式能正常连接,说明PAC的某个设置影响了ssh的正常工作;
  • PAC模式下用curl、wget、telnet等软件,工作正常,只有ssh工作异常;
  • 把主机名换成ip,能正常连接到服务器;
  • 把主机名换成域名,无法连接。

以上种种情况说明,升级到macOS 10.15.4后,ssh确实受到了影响,无法连接到主机别名、域名的服务器,ip方式则不受影响。

ssh是系统内置软件,ssh -V 查看版本信息:

OpenSSH_8.1p1, LibreSSL 2.7.3

想着用brew安装openssh会不会好点呢?于是果断 brew install openssh,安装完后打开新终端,问题解决!

总结

升级到macOS 10.15.4后,如下两种情况的ssh使用不会受到影响:

  1. 用ip连接服务器的;
  2. 之前就已经用openssh客户端的。

如果你用着系统内置的ssh,并像我一样喜欢用别名或者域名连接服务器,安装openssh是问题的终极解决办法。当然,如果不嫌麻烦,连接的时候关闭代理也是出路。

参考

1. So, uh, I think Catalina 10.15.4 Broke SSH?