今天突然发现自己的 Mac 登录不上一台服务器,而用另一台服务器却可以正常登录,区别就是 openssh 的版本不一样。

发现登录不上的第一反应是怀疑自己的公钥被人从服务器上删除了,但这种可能性应该比较小, 所以带着怀疑,我尝试在另一台电脑上进行登录服务器,居然成功,两边的私钥也是一样的,ssh_config 也是一样的,这就让我头疼了。 下面是使用 -vvv 参数进行登录时的输出内容:

ssh-connect-failed.txt

说实话,啥也没看出来,但是发现了两台电脑的 OpenSSH 版本不一样:

m1(登录失败):

m2(登录成功):

一开始我还不相信是自己电脑的问题,然后检查了下服务器的 OpenSSH 版本,发现居然是 6.6.1, 果断认为是因为服务器的 OpenSSH 的版本太低导致的:

因此,我决定把服务器上的 OpenSSH 给升级到了 8.6,服务器系统是 CentOS 7,升级步骤:

curl -LO https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz
tar zxf openssh-8.6p1.tar.gz
cd openssh-8.6p1
./configure
make && make install

OpenSSH Portable Release: https://www.openssh.com/portable.html#downloads

升级好了🧑🏻‍💻:

但再次尝试登录还是不行🥲,看来还是要把 Mac 上的 OpenSSH 降低版本:

# 卸载 openssh
brew uninstall openssh

# 安装低版本的 openssh 8.6
brew extract --version=8.6p1 openssh homebrew/cask
brew install openssh@8.6p1

refer: https://stackoverflow.com/questions/3987683/homebrew-install-specific-version-of-formula

终于可以登录了: