PVE作为客户端使用密钥公钥来连接远程SSH服务端失败的解决办法

之前我其他的Linux作为客户端,都是只需要上传id_rsa到 ~/.ssh/id_rsa即可,不用传id_rsa.pub,但PVE这样做就不行,查了半天搜索引擎和ChatGPT无果,让我检查权限和 ~/.ssh/config /etc/ssh/ssh_config 中有没有覆盖默认的行为,但都排查过了不是

我使用不同的机器来连接 给ssh连接命令加上-v输出详细日志,发现有不一样的地方

即使是同一个硬链接出来的文件,

尝试手动指定密钥文件,发现 ssh -i id_rsa root@IP 是不能登录的, ssh -i id_rsa.copy root@IP 是可以正常登录的

他们明明是同一份文件啊,sha256sum id_rsa* 得到的哈希值也是一样的啊

而且日志这里显示的SHA256都不一样,然后手动计算密钥和算法的SHA256,发现长度不一样,而且客户端名称也不一样


root@armbian:~/.ssh# ssh-keygen -l -E sha256 -f /root/.ssh/id_rsa
2048 SHA256:lTcsjMBQ6j4HOQGwAO1/N4xm1qgvQd4ICV+BZ9N2c7U root@r08 (RSA)
root@armbian:~/.ssh# ssh-keygen -l -E sha256 -f /root/.ssh/id_rsa.copy 
4096 SHA256:Jyaogf4KWUUWA1vJBWPSCaHzl64NaXh/nzV/+lmca/w administrator@K660E (RSA)

后来对比才发现PVE的多了一个id_rsa.pub文件,里面就是记录的r08,而其他的客户端没有这个文件
尝试删掉这个文件(mv改名)后发现,PVE也能用密钥连接到远程服务器了,那就是多了这个文件导致的

也就是客户端的密钥和客户端的公钥不匹配,服务端也会拒绝登录,让你登录失败
但客户端只有密钥,客户端没有公钥,反而服务端不会拒绝登录,让你登录成功

解决办法很简单了,就是把id_rsa.pub 也上传到PVE中覆盖掉原来PVE自带的那个id_rsa.pub即可