我有以下旧 Linux 系统,并使用专有软件工具尝试将文件(使用sftp或 curl)复制到较新的 Linux 系统,但失败了。系统如下:
财产 | 发起人系统 | 目的地系统 |
---|---|---|
操作系统 | CentOS 7 衍生产品 | Rocky Linux 9.5 |
SSH-V | OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 |
OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024 |
通过嗅探我们发现:
- 服务器的Diffie-Hellman组交换答复数据包确认以下协商参数:
- 密钥交换算法(KEX):diffie-hellman-group-exchange-sha256(匹配客户端支持✅)
- 加密算法:aes128-ctr(符合客户端支持✅)
- MAC 算法:hmac-sha2-256(符合客户端支持✅)
- 压缩:无(匹配客户端支持✅)
- 主机密钥类型:ssh-rsa(符合客户端支持✅但请参见下文)
- 主机签名类型:rsa-sha2-256(潜在问题⚠️)
服务器的 KEX 回复中的主机密钥类型是 ssh-rsa,客户端支持该类型。但是,服务器使用的签名类型是 rsa-sha2-256,客户端在其 SSH_MSG_KEXINIT 消息中未声明支持该类型。
我一直在查看/etc/ssh/ssh_config
和/etc/ssh/sshd_config
文件,以查看可以在 Rocky Linux 9.5 系统上进行的配置修改以支持交换,但没有找到。我还尝试将以下内容添加到 /etc/ssh/sshd_config(如另一个案例所建议的) ,但也失败了:
# Allow mildly-outdated cipher selection
Ciphers +aes128-cbc
# Allow negotiating cipher key using weak DH
# (only add group1 if you *really* need it)
KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
# Offer SHA1 signatures for host pubkey
HostKeyAlgorithms +ssh-rsa
# Accept SHA1 signatures for client pubkey
PubkeyAcceptedAlgorithms +ssh-rsa
真正的解决方案是升级这个旧的 CentOS 7 衍生产品,但在这样做之前,我需要完成文件复制工作以完成几个测试。
因此,我正在寻找一个临时解决方案,修改 Rocky Linux 9.5 系统的配置以允许文件传输。有人知道应该进行哪些配置更改/添加吗?
问题的根源在于众所周知的事实,即 RHEL 9 默认采用更强的加密设置,破坏了与传统系统的兼容性。
/etc/ssh/sshd_config
问题的第二部分是 RHEL 9 和 Rocky Linux 等衍生产品通过利用“加密策略”以规避/覆盖任何加密设置的方式影响 SSHD 的加密设置。请参阅https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening(对于 sshd(以及类似的其他守护进程)而言,加密策略受 systemd 服务单元附加特定命令行选项的影响,这些选项会覆盖 中的设置
/etc/ssh/sshd_config
。)RHEL 9 系统上的 SSH 守护程序的选项是:
按照RHEL 9 强化指南中所述,将系统范围的加密策略切换为与早期版本兼容的模式。以
root
(或使用sudo
) 运行:然后重新启动。
注意:这会更改所有守护进程和系统设置,如果您只需要调整 ssh 和 sshd 的设置,那就太过分了。
从系统范围的加密策略中排除(仅)sshd。
您可以通过编辑
/etc/sysconfig/sshd
并取消注释行# CRYPTO_POLICY=
, 来选择退出(如有必要,您可以进一步调整/etc/ssh/sshd_config
并添加旧加密设置)。这将使 ssh 守护程序再次仅在其配置文件中查找加密设置。[sudo] systemctl daemon-reload
可能需要,您当然需要使用 和 重新启动 ssh 守护程序[sudo] systemctl restart sshd