当您使用Ubuntu、CentOS Stream 9等操作系统的ECS实例,且通过RSA密钥在FinalShell、nuoshell等部分SSH客户端连接ECS实例时,可能出现登录失败的问题,您可以参考本文的操作进行解决。
目录
背景信息
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。 非对称加密算法包含公钥(Public Key)和私钥(Private Key),公钥和私钥是一种通过算法得到的密钥对,在ECS中创建的密钥对默认采用RSA加密方式。更多信息,请参见SSH密钥对概述。
Ubuntu 22.04无法使用RSA密钥登录
在SSH协议中,ssh-rsa签名算法是SHA1的哈希算法和RSA公钥算法的结合使用。由于目前SHA1的哈希算法容易受到攻击,OpenSSH从8.7以后版本开始默认不支持ssh-rsa签名方案。
问题现象
使用FinalShell、nuoshell等部分SSH客户端软件通过RSA密钥远程连接ECS实例时,SSH客户端提示登录失败,sshd服务日志提示如下:
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
问题原因
在最新版本的操作系统中,OpenSSH默认不再支持ssh-rsa(rsa/SHA1)签名算法,如果指定使用ssh-rsa(rsa/SHA1)签名算法将会登录失败。由于FinalShell、nuoshell等部分SSH客户端软件默认仅支持使用ssh-rsa(rsa/SHA1)签名算法,不能兼容使用rsa-sha2-256(rsa/SHA256)或者rsa-sha2-512(rsa/SHA512),所以无法登录。
解决方案
您可以通过以下任一种方案解决该问题:
- 方案一:使用ECDSA或者DSA等其他加密方式。
- 方案二:使用其他SSH客户端进行登录,例如阿里云自带的Workbench。关于Workbench连接方式的更多信息,请参见连接方式概述。
- 方案三:运行以下命令,在sshd配置中允许使用ssh-rsa(rsa/SHA1)的签名算法。
重要 由于ssh-rsa(rsa/SHA1)签名算法并不安全,请您谨慎操作。
echo 'PubkeyAcceptedAlgorithms=+ssh-rsa' >> /etc/ssh/sshd_config systemctl restart sshd
CentOS Stream 9等系统无法使用RSA密钥登录
涉及系统范围
- CentOS Stream 9
- AlmaLinux 9
- Rocky Linux 9
- Red Hat Enterprise Linux 9
- Fedora 33及以上
问题现象
使用FinalShell、nuoshell等部分SSH客户端软件通过RSA密钥远程连接ECS实例时,SSH客户端提示登录失败,sshd服务日志提示:
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
问题原因
CentOS Stream 9系列系统在OS内部的crypto-policies策略默认为DEFAULT,在该策略模式下openssh-server禁用了ssh-rsa(rsa/SHA1)签名算法。由于FinalShell、nuoshell等部分SSH客户端软件默认仅支持使用ssh-rsa(rsa/SHA1)签名算法,不能兼容使用rsa-sha2-256(rsa/SHA256)或者rsa-sha2-512(rsa/SHA512),所以无法登录。
update-crypto-policies --show
命令查看当前系统的策略。解决方案
您可以通过以下任一种方案解决该问题:
- 方案一:使用ECDSA或者DSA等其他加密方式。
- 方案二:使用其他SSH客户端进行登录,例如阿里云自带的Workbench。关于Workbench连接方式的更多信息,请参见连接方式概述。
- 方案三:运行以下命令,切换策略为LEGACY。
重要 LEGACY策略模式可能存在未知安全隐患,请您谨慎操作。
update-crypto-policies --set LEGACY update-crypto-policies --show
终极解决办法
重新生成能用的密钥
ssh-keygen -t ecdsa
生成完后导入了腾讯云的 SSH 密钥(文件在:~/.ssh)
这时候问题又来了,finalshell 提示:
暂不支持此私钥格式,请参考以下方法解决:
1.转换成PEM格式私钥
ssh-keygen -p -m PEM -f 私钥路径
2.生成PEM格式的私钥
生成时增加 -m PEM参数
ssh-keygen -m PEM -t rsa -C "注释"
于是我用这个把私钥转换了一下(注意会覆盖原文件,如有需要先备份)
ssh-keygen -p -m PEM -f id_ecdsa
用 finalshell 导入转换后的私钥,成功连接到了服务器!
原文:
https://help.aliyun.com/document_detail/460037.html
https://cloud.tencent.com/developer/article/2069157