如何在 CentOS 9 Stream 上使用旧式 ssh-rsa 密钥?

如何在 CentOS 9 Stream 上使用旧式 ssh-rsa 密钥?

我正在设置一个新的 CentOS 9 Stream 容器作为 CI 系统的一部分。它需要建立 SSH 连接,使用密钥从旧版 Git 主机下载一些代码ssh-rsa(这在该主机的网络上被视为可接受的风险)。

我首先生成一个密钥。

ssh-keygen -t ssh-rsa -f test_rsa_key

使用密钥运行时,我收到“无相互签名算法”错误。

ssh -v -i test_rsa_key user@server
debug1: Next authentication method: publickey
debug1: Offering public key: test_rsa_key RSA SHA256:<snip> explicit
debug1: send_pubkey_test: no mutual signature algorithm
debug1: No more authentication methods to try.
user@server: Permission denied (publickey).

我可以ssh-rsa使用明确启用-oPubkeyAcceptedKeyTypes=+ssh-rsa,但现在出现 libcrypto 错误。

ssh -oPubkeyAcceptedKeyTypes=+ssh-rsa -v -i test_rsa_key user@server
debug1: Next authentication method: publickey
debug1: Offering public key: test_rsa_key RSA SHA256:<snip> explicit
debug1: Server accepts key: test_rsa_key RSA SHA256:<snip> explicit
debug1: identity_sign: sshkey_sign: error in libcrypto
sign_and_send_pubkey: signing failed for RSA "test_rsa_key": error in libcrypto
debug1: No more authentication methods to try.
user@server: Permission denied (publickey).

CentOS 9 Stream 中的 libcrypto 级别是否可能ssh-rsa禁用了对旧签名方法的支持?如何在最新的 CentOS 上使用此密钥建立连接?

答案1

找到了答案,感谢类似问题其他人已经在 Red Hat Bugzilla 上发现了它。

此问题是由 SHA1 弃用引起的。您可以通过设置加密策略DEFAULT:SHA1(仅重新启用 SHA-1)或LEGACY(为了与更旧的版本兼容)来解决此问题,具体说明如下这里

命令是:

update-crypto-policies --set DEFAULT:SHA1

或者

update-crypto-policies --set LEGACY

运行之前,请检查链接页面,因为LEGACY它确实启用了一些相当旧的加密设置,这对于您的用例来说可能太不安全了。

答案2

在默认加密策略中,使用 SHA-1 进行签名受到限制。

尝试从 RHEL9(或变体)客户端通过 SSH 连接到 RHEL6(或变体)OpenSSH 服务器失败,并显示以下错误消息:

ssh_dispatch_run_fatal: Connection to 1.2.3.4 port 22: error in libcrypto

有两个已知选项:

  1. 在 RHEL9 上,启用旧式 SHA1 加密策略(不建议):
update-crypto-policies --set DEFAULT:SHA1
  1. 在 RHEL6 上,使用 ECDSA 算法而不是 RSA 来创建主机密钥(首选)

    i. 生成 sshd ECDSA 主机密钥:

    ssh-keygen -t ecdsa -b 384 -f /etc/ssh/ssh_host_ecdsa_key
    semanage fcontext -a -f -- -t sshd_key_t /etc/ssh/ssh_host_ecdsa_key
    semanage fcontext -a -f -- -t sshd_key_t /etc/ssh/ssh_host_ecdsa_key.pub
    

    ii. 编辑/etc/ssh/sshd_config并设置:

    HostKey /etc/ssh/ssh_host_ecdsa_key
    

    iii. 重启sshd

    service sshd restart
    

答案3

如果您没有锁定 RSA 密钥对,则可以改用 ECDSA。

就我而言,我在尝试从 RHEL 9 客户端通过 SSH 连接到 RHEL 6 服务器时遇到了同样的错误。我能够通过生成和使用 ECDSA 密钥对(而不是 RSA)来解决这个问题:

ssh-keygen -t ecdsa
ssh user@host -i ~/.ssh/id_ecdsa

另一个答案提到在服务器上生成 ECDSA 主机密钥。就我而言,RHEL 6 服务器已经在使用 ECDSA 主机密钥。

使用 ECDSA 密钥对和主机密钥,我不需要设置其他答案中提到的“传统”加密策略。

答案4

在我的环境中,我有一个 RHEL5 系统、一个 Centos 6.9 系统和一个 Centos 6.6 系统。我正在努力在新硬件上使用 Rocky 9 构建 Centos 6.9 系统的替代品。我需要从 Rocky 9 系统运行 SSH 以连接每个旧系统。

ecdsa 密钥替换适用于从 Rocky 9 系统连接到 Centos 系统,但不能连接到 RHEL5 系统。而且我仍然无法从旧系统连接到 Rpcly 9。在此过程中,我尝试了以下建议的变体:https://unix.stackexchange.com/questions/674582/how-to-enable-ssh-rsa-in-sshd-of-openssh-8-8这改变了症状但并未解决问题。

最后一个似乎已经解决了我的连接问题的更改是

更新加密策略——设置默认:SHA1

命令如上所述。

相关内容