解决使用RSA密钥无法登录|key type ssh-rsa not in PubkeyAcceptedAlgorithms

实用教程 admin 1年前 (2023-02-15) 564次浏览 0个评论

当您使用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签名方案。

说明 默认不支持ssh-rsa签名方案并不意味着停止使用RSA密钥,密钥可以通过多种算法进行签名,RSA密钥可以使用rsa-sha2-256(rsa/SHA256)、rsa-sha2-512(rsa/SHA512)等多种签名算法来进行签名,只有ssh-rsa(rsa/SHA1)签名算法被默认禁用。

问题现象

使用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


VPS小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:解决使用RSA密钥无法登录|key type ssh-rsa not in PubkeyAcceptedAlgorithms
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址