如何替换 ssh 私钥和公钥对?

如何替换 ssh 私钥和公钥对?

如果我觉得我的原始 ssh 已被破解,因为有人知道密码,我是否需要替换私钥和公钥对,还是只更改密码?哪一个是解决方案,我该怎么做?

谢谢

答案1

如果您知道某人有密码,那么他很可能使用了您的 ssh 密钥。如果是这样,您可能无法知道该人是否复制了您的 ssh 密钥。如果该人有您的密钥副本,而您更改了密钥上的密码,则副本显然仍使用旧密码,因此该人可以使用。因此,为了安全起见,我建议替换您的 ssh 密钥。

您可以通过运行来生成新密钥

ssh-keygen -f ~/.ssh/new-key

这将在 中创建一个新的 ssh 密钥~/.ssh/new-key

不要忘记不仅要创建新密钥,还要从所有拥有该密钥的机器中删除旧密钥。

更新:为此,首先列出可以使用该 ssh 密钥访问的所有计算机。然后,针对每台计算机执行以下操作:

user@local:~$ ssh someuser@somemachine
someuser@somemachine:~$ nano .ssh/authorized_keys

编辑该文件并执行以下操作:

  1. 删除包含旧 ssh 密钥的行。如果只有一行,这很容易,如果没有,请查找以与旧公钥相同的神秘字母结尾的行。您可以在cat ~/.ssh/id_rsa.pub本地机器上执行以查看旧公钥(假设您的旧密钥是 id_rsa,如果不是,则必须调整命令)。要删除 中的一行nano,只需按Ctrl+ K
  2. 将你的新公钥添加到该文件。使用 可以在本地计算机上找到新公钥cat ~/.ssh/new-key.pub。将整行逐字复制到文件中作为一行。
  3. Ctrl按+保存文件OEnter然后Ctrl按 +X退出nano

然后测试您是否可以在不关闭现有连接的情况下使用新密钥访问机器(以便在出现问题时您仍然可以连接)。

user@local:~$ ssh -i ~/.ssh/new-key someuser@somemachine

如果此操作有效并且您已连接到远程计算机,则您已成功替换该计算机上的 ssh 密钥。现在继续使用下一台机器。重复操作,直到完成。

你也许能够稍微自动化一下整个过程:

ssh-copy-id -i ~/.ssh/new-key.pub someuser@somemachine
ssh -i ~/.ssh/new-key someuser@somemachine "sed -i.bak 's/$(cut -f2 ~/.ssh/id_rsa.pub | sed 's~/~\\/~g')/d' ~/.ssh/authorized_keys"

但我不保证此方法有效,并且不会将您锁定在某些机器之外。使用时请自担风险!

它的作用是ssh-copy-id复制你的新密钥,并用它sed从文件中删除你的旧密钥authorized_keys$(cut -f2 ~/.ssh/id_rsa.pub | sed 's~/~\\/~g')将你的旧公钥添加到命令中,以便它能够搜索它并注意转义斜杠。/some-string/d从文件中删除所有与字符串匹配的行(在我们的例子中是你的旧密钥)。

仅当您有很多机器需要更改密钥时才这样做,并首先在您可以物理访问的机器上对其进行测试,或者在出现问题时通过其他方式恢复访问权限。更新结束

更换旧密钥后,您可以将密钥重命名为,以便~/.ssh/id_rsa自动ssh找到它。您可能希望保留旧密钥的备份,以防您忘记了您无法再访问的系统。

更新:要做到这一点,只需运行:

cd ~/.ssh
mv id_rsa id_rsa_old
mv id_rsa.pub id_rsa_old.pub
mv new-key id_rsa
mv new-key.pub id_rsa.pub

如果您需要再次使用旧钥匙,您可以使用ssh -i ~/.ssh/id_rsa_old它。不要忘记将新钥匙添加到该机器并移除旧钥匙。

相关内容