如何翻转 ssh 主机密钥?

der*_*ert 17 ssh openssh

我正在尝试将我的 ssh 服务器从 2048 位 RSA 密钥升级到更大的密钥,因为建议尽快淘汰 2048 位密钥。

我生成了一个新密钥,然后将其添加到 sshd 配置中,如下所示:

HostKey /etc/ssh/ssh_host_rsa_key             (旧的 2k 位密钥第一) 
HostKey /etc/ssh/ssh_host_rsa4096_key         (新的较大密钥第二

重新启动后sshd,我通过 ssh 连接到主机,我没有收到标识更改警告,但是新的也没有缓存在~/.ssh/known_hosts. 如果我以相反的顺序放置线条,我会收到标识更改警告。同样,当我添加一个 ed25519 密钥时,无论我把它放在什么位置,客户端都不会将新密钥添加到已知的主机文件中。

这似乎使 SSH 主机密钥轮转成为不可能——但很难相信情况确实如此,但考虑到安全性通常需要升级密钥。

我知道您可以只交换密钥,然后每个客户端都需要运行ssh-keygen -R以删除旧密钥,然后手动验证并接受新密钥 - 但这是一个真正的痛苦,特别是如果您有很多客户端连接或不管理所有的客户。更不用说,如果您不管理客户端,他们很有可能实际上不会检查主机密钥,而是直接按 Y 键——因此,提高安全性的尝试实际上可能会让您面临人为攻击——相反,中间人攻击。

有什么方法可以使 SSH 主机密钥升级工作吗?也就是说,客户端应该学习新的更安全的密钥(并希望取消学习过时的密钥)。并且没有给出主机密钥更改的中间人警告。

Jak*_*uje 14

从 OpenSSH 6.8 开始支持主机密钥轮换(客户端和服务器都在此版本中增加了支持)。

所以这个过程应该是这样的:

  • 使用选项HostKey newkey(在现有密钥之后)生成并添加新密钥到/etc/ssh/sshd_config
  • 重新开始 sshd
  • 客户端必须UpdateHostKeys yes在其配置中进行设置(全局或每个主机)
  • 连接客户端将获取所有新密钥
  • 一段时间(几个月?)后,您可以从 中删除旧密钥sshd_config并重新启动sshd
  • 客户端(在过渡期间连接的)已经拥有新密钥(旧密钥不会被删除,这是这里唯一的问题)并且它们不会显示中间人攻击警告。

新的足够多的客户将能够拿起新的钥匙。默认情况下不启用此功能,可能是因为它很新,很快就会显示出一些安全问题。不过这几天用起来应该没问题。