问题

装了一个ubuntu22.04(机器A),和老机器ubuntu12.04(机器B)通信的时候出现了问题,由于禁止了密码登陆,互相配了密钥,结果出现了AB机器不能互相通信的情况

解决方案

ubuntu22.04中默认openssh和ssl版本过高导致的和低版本ssh无法互相通信的问题_重启

在/etc/ssh/sshd_config(该路径是系统自带ssh路径,如果你是自己编译指定的其他目录,就需要找到其他目录中的sshd_config配置文件)中的最后,添加配置

Pubkeyacceptedkeytypes ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa

可以解决B访问A的问题,但是A访问B仍然无法访问

ubuntu22.04中默认openssh和ssl版本过高导致的和低版本ssh无法互相通信的问题_高版本openssh_02

提示该报错

要想A能够成功访问B,还需要在/etc/ssh/ssh_config(该路径是系统自带ssh路径,如果你是自己编译指定的其他目录,就需要找到其他目录中的ssh_config配置文件)再加两条配置

ubuntu22.04中默认openssh和ssl版本过高导致的和低版本ssh无法互相通信的问题_ubuntu_03

Host *
    PubkeyAcceptedKeyTypes=+ssh-rsa

最后重启一下sshd服务

一般为systemctl restart sshd

解决!

再说一下原因,因为在openssh8.2开始,因为安全原因,禁用 ssh-rsa 公钥签名算法。有一些更好的算法可以替代,包括 RFC8332 RSA SHA-2 签名算法 rsa-sha2-256/512、ssh-ed25519 签名算法与 RFC5656 ECDSA 算法。目前这些算法在 OpenSSH 中都已经支持。

这里说一下,并不是不能用rsa密钥,而是密钥生成的公钥签名算法被废弃,所以低版本ssh的使用ssh-rsa生成的一些密钥将无法和高版本默认配置的ssh通信,上面的配置就是让高版本ssh的client(ssh_config配置文件)端和server(sshd_config)端支持老的ssh-rsa算法