我正在设置一个新的 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
答案2
在默认加密策略中,使用 SHA-1 进行签名受到限制。
尝试从 RHEL9(或变体)客户端通过 SSH 连接到 RHEL6(或变体)OpenSSH 服务器失败,并显示以下错误消息:
ssh_dispatch_run_fatal: Connection to 1.2.3.4 port 22: error in libcrypto
有两个已知选项:
- 在 RHEL9 上,启用旧式 SHA1 加密策略(不建议):
update-crypto-policies --set DEFAULT:SHA1
在 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
命令如上所述。