前言

SSH免密登录早已是开发过程中的基本操作,最近在连接一台CentOS的服务器时遇到了无法使用公钥登录的情况。

Ojos-MacBook-Pro:~ hsojo$ ssh root@192.168.*.*
root@192.168.*.*'s password: 

公钥早已在服务端添加信任,但连接时反复提示输入密码。

排查

对比两台机器连接的日志,尝试找出原因。

  • 登录失败机器的日志
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/hsojo/.ssh/id_rsa RSA SHA256:**************
debug1: send_pubkey_test: no mutual signature algorithm
  • 登录成功机器的日志
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/hsojo/.ssh/id_rsa RSA SHA256:**************
debug1: Server accepts key: /Users/hsojo/.ssh/id_rsa RSA SHA256:**************
Authenticated to 192.168.*.* ([192.168.*.*]:22) using "publickey".

可知问题关键在于send_pubkey_test: no mutual signature algorithm这部分。

经过一番搜索,可知OpenSSH 客户端默认不再支持ssh-rsa算法进行公钥登录。

解决方案

临时方案

  • 连接时增加允许ssh-rsa公钥类型的选项
ssh root@192.168.*.* -o "PubkeyAcceptedKeyTypes +ssh-rsa"

永久方案

  • 将以下内容写入~/.ssh/config
PubkeyAcceptedKeyTypes +ssh-rsa