我有一台 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
.为什么有区别?什么决定使用哪个公钥?
答案1
在SSH协议中,密码、MAC、密钥交换、主机密钥和公钥所使用的算法可以独立协商。在大多数情况下,选择的算法是服务器也支持的第一个客户端算法。
通常,服务器具有多个主机密钥,并且所使用的主机密钥的选择取决于协商的算法。最新版本的 OpenSSH 更喜欢 Ed25519 密钥,在此之前,更喜欢 ECDSA 密钥。然而,OpenSSH 有一项特殊规则,即如果没有使用主机密钥的特殊配置,并且已知主机文件中至少已知一个主机密钥,那么它将重写首选客户端算法以首选它所知道的主机密钥。这意味着如果服务器添加新的主机密钥,用户将不会看到主机密钥警告。
如前所述,通常首选 Ed25519 和 ECDSA 密钥。然而,OpenSSH 最近放弃了对自动使用 RSA 和 SHA-1(ssh-rsa
签名算法,不安全)的支持,但仍然支持 RSA 和 SHA-2(rsa-sha2-256
和rsa-sha2-512
)。有时,尽管存在已知的安全风险,人们还是选择在配置中重新启用ssh-rsa
算法,并且人们使用的典型模式将该算法放在列表的前面。因此,在该系统上,可能在~/.ssh/config
或中启用了此类配置/etc/ssh/ssh_config
,导致首选 RSA 密钥。
答案2
您可以选择密码在sshd_config
。在繁忙或旧的服务器上,管理员可能会提供 CPU 密集度较低的密码套件。网站和确保与每个客户端浏览器的连接安全的协商也会发生类似的情况,因为服务器和客户端最终必须就它们都支持的技术达成一致。所以用户确实也有一定的影响力(ssh_config
)。
/etc/ssh/sshd_config
如果你想看一下,它就在服务器上。
您可以使用以下方式探测服务器ssh 密钥扫描。看这里:https://serverfault.com/questions/934072/how-to-view-ecdsa-host-key-of-a-server