如何重新生成 SSH 密钥?

如何重新生成 SSH 密钥?

这些是生成的密钥ssh,它们不是我创建的。

# ls -l /etc/ssh/
total 276
-rw-r--r--  1 root root     242153 Mar 22  2016 moduli
-rw-r--r--  1 root root       2208 Mar 22  2016 ssh_config
-rw-r--r--  1 root root       4360 Feb 29  2016 sshd_config
-rw-r-----. 1 root ssh_keys    227 Mar  5  2015 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Mar  5  2015 ssh_host_ecdsa_key.pub
-rw-r-----  1 root ssh_keys    387 Apr  8  2015 ssh_host_ed25519_key
-rw-r--r--  1 root root         82 Apr  8  2015 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1679 Mar  5  2015 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Mar  5  2015 ssh_host_rsa_key.pub

拥有这些密钥的服务器是 Vagrant 实例。我有多个实例,但不幸的是每个实例都有相同的密钥。因此,我需要重新生成所有密钥以区分每个服务器。

我怎样才能重新生成这些密钥?

答案1

删除旧密钥,然后运行:

ssh-keygen -A
restorecon /etc/ssh/ssh_host_*

注意:moduli和(显然)sshd_config不是键,不应被删除。

也可以使用以下命令逐个生成主机密钥:

for type in rsa dsa ecdsa ed25519; do
    ssh-keygen -t ${type} -N "" -f /etc/ssh/ssh_host_${type}_key
done
restorecon /etc/ssh/ssh_host_*

答案2

$ sudo rm /etc/ssh/ssh_host_*
$ sudo ssh-keygen -A

-A标志自动生成缺失的主机密钥:

如果不存在,则生成所有默认密钥类型(rsa、ecdsa 和 ed25519)的主机密钥。主机密钥使用默认密钥文件路径、空密码、密钥类型的默认位和默认注释生成。如果还指定了 -f,则其参数将用作生成的主机密钥文件的默认路径的前缀。系统管理脚本使用它来生成新的主机密钥。

对于操作系统映像,我建议不要包含任何主机密钥(运行第一个命令),并安排第二个命令在(第一次)启动时运行。这应确保每个克隆/生成的系统都获得一组新密钥,并且它们之间不存在意外的信任关系。

答案3

您可以像这样重新生成密钥:

  1. 移走旧钥匙:

    cd /etc/ssh
    sudo mkdir old
    sudo mv ssh_host_* old
    
  2. 生成新密钥:

    sudo dpkg-reconfigure openssh-server
    
  3. 比较新旧密钥以确保它们不同:

    sudo md5sum ssh_host_*
    sudo md5sum old/ssh_host_*
    sudo rm -rf old
    

相关内容