我有一个 RHEL 8.3 服务器,这是/etc/ssh
文件夹中的内容:
[root@192 ssh]# pwd
/etc/ssh
[root@192 ssh]# tree -a
.
├── moduli
├── ssh_config
├── ssh_config.d
│ └── 05-redhat.conf
├── sshd_config
├── ssh_host_ecdsa_key
├── ssh_host_ecdsa_key.pub
├── ssh_host_ed25519_key
├── ssh_host_ed25519_key.pub
├── ssh_host_rsa_key
└── ssh_host_rsa_key.pub
1 directory, 10 files
[root@192 ssh]#
我发现当我从 server1 SSH 到该服务器时,RSA 公钥 (ssh_host_rsa_key.pub) 已添加到服务器 1 的~/.ssh/known_hosts
文件中。但是当我尝试另一台服务器 server2 时,ECDSA 公钥(ssh_host_ecdsa_key.pub)被添加到~/.ssh/known_hosts
. 为什么有区别?什么决定了将使用哪个公钥?
在 SSH 协议中,用于密码、MAC、密钥交换、主机密钥和公钥的算法可以独立协商。在大多数情况下,选择的算法是服务器也支持的第一个客户端算法。
通常,服务器有多个主机密钥,使用的主机密钥的选择取决于协商的算法。最新版本的 OpenSSH 更喜欢 Ed25519 密钥,在此之前,首选 ECDSA 密钥。但是,OpenSSH 有一个特殊规则,如果没有使用主机密钥的特殊配置,并且在已知主机文件中至少知道一个主机密钥,那么它将重写首选客户端算法以首选它知道的主机密钥。这意味着如果服务器添加新的主机密钥,用户将不会看到主机密钥警告。
如前所述,通常首选 Ed25519 和 ECDSA 密钥。然而,OpenSSH 最近放弃了对自动使用带有 SHA-1 的 RSA(
ssh-rsa
签名算法,这是不安全的)的支持,但它仍然支持带有 SHA-2 的 RSA(rsa-sha2-256
和rsa-sha2-512
)。有时人们选择在配置中重新启用ssh-rsa
算法,尽管存在已知的安全风险,而人们使用的典型模式将算法放在列表的前面。因此,在该系统上,可能在~/.ssh/config
or中启用了此类配置/etc/ssh/ssh_config
,从而导致首选 RSA 密钥。您可以选择 中的密码。
sshd_config
在繁忙或旧的服务器上,管理员可能会提供 CPU 密集度较低的密码套件。类似的事情发生在网站和确保与每个单独客户端浏览器的连接的协商中,因为服务器和客户端最终必须就他们都支持的技术达成一致。所以用户也确实有一些影响(ssh_config
)。/etc/ssh/sshd_config
如果您想看一下,它在服务器上。您可以使用ssh-keyscan探测服务器。见这里:https ://serverfault.com/questions/934072/how-to-view-ecdsa-host-key-of-a-server