首页 值得一看 🔍️

众里寻他千百度,蓦然回首,答案就在眼皮子底下……

正如标题所述,我遇到的问题是服务器拒绝了我的ssh免密登录,具体情况是我之前已经配置好了ssh免密登录,但是最近突发 PC ssh 登录云服务器报错,接连好些天都没找到原因。

ssh 免密码登录本身不是一个复杂的问题,百度 / google 上面随便都找得到教程。关键点在于:

  1. 基于 RSA 密钥对保障通信的安全。
  2. 将公钥传递到目标服务器的 ~/.ssh/authorized_keys 中。
// 生成密钥
ssh-keygen -t rsa -b 4096 -C "your comment"
// 将公钥发送到目标服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
// 免密登录
ssh user@host

我自己的一台个人服务器原本也配置好了 authorized_keys,免密登录一直用得挺好,在PC本地,remote CI/CD 中一直跑得通。

然而,最近我不知道在服务器上调整了什么,或者是我的 PC 发生了什么升级,不记得了,反正现象就是在 git bash 使用 ssh 免密登录上不去了,一直提示 Permission denied (publickey) 之类的报错信息,但是在 xshell 或者 CI/CD 中都是正常的。

$ ssh txcentos
username@xxx.xx.xx.xx: Permission denied (publickey).

网上自然有各种类似问题,解决方案诸如修改 .ssh 目录权限,修改 sshd_config 配置等,或者是说你的密钥不对(然而重新生成了也一样,emm…)。

  • 调整了权限,发现不是权限的问题
chmod 700 ~/.ssh
chmod 600 .ssh/authorized_keys
  • 调整了 sshd_config 的几个关键配置,发现也不是这个问题。
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication no

// 调整之后重启服务
systemctl restart sshd.service
// 或者
service sshd restart

其实我心里很清楚,我的问题可能不是这些情况,即使从报错信息上看还是差不多的。我抱着试试的态度,改了一遍又一遍,还是不太行,要么是提示 denied,要么是 ssh 登录时让我输入密码(这还怎么免密),有点崩溃。

最终决定从 ssh 命令上 debug 看看报错信息(这是我之前忽略的,应该从这里开始查的),

$ ssh txcentos -v

找到了这么一个关键信息。

debug1: send_pubkey_test: no mutual signature algorithm
debug1: No more authentication methods to try.

顺着no mutual signature algorithm这个信息查到了一些资料,由于 OpenSSH 从 8.8 版本由于安全原因开始弃用了 rsa 加密的密钥,需要在 .ssh 的 config 配置中加入这么一行:

PubkeyAcceptedKeyTypes +ssh-rsa

经测试真的管用,免密登录成功!

$ ssh xxx
Last login: Tue Sep  6 xx:xx:47 2022 from xxx.xx.xxx.xxx

同时我也检查了 PC 的 openssh 版本,确实是高于 8.8 版本的。

$ ssh -V
OpenSSH_9.0p1, OpenSSL 1.1.1o  3 May 2022

接着我还是去查阅 openssh 8.8 的发行日志核实了一下,确实有关于 security 的 incompatible changes,具体与 RSA/SHA-256/512 和 RSA/SHA1 有关。

详细资料可以参考 https://www.openssh.com/txt/release-8.8



文章评论

未显示?请点击刷新