将 ssh 密钥从一台服务器复制到另一台服务器

将 ssh 密钥从一台服务器复制到另一台服务器

我有一台服务器(假设它的 IP 是 abcd),允许用户通过 ssh 登录。现在我想更换物理机,保持 IP 不变。这样新机器仍然可以被用户访问,就像这样

$ssh abcd

问题是,每次用户尝试登录时,都会收到以下 ssh-key 不匹配错误。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 警告:远程主机标识已更改!@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
可能有人正在做一些恶意的事情!
现在可能有人正在窃听您(中间​​人攻击)!
RSA 主机密钥也可能刚刚被更改。
远程主机发送的 RSA 密钥的指纹是
02:dc:c6:18:1b:34:b7:1d:fa:90:ab:e1:95:48:69:84。
请联系您的系统管理员。
在 /home/user/.ssh/known_hosts 中添加正确的主机密钥以摆脱此消息。
/home/user/.ssh/known_hosts:37 中的违规密钥
校友的 RSA 主机密钥已更改,您已请求严格检查。
主机密钥验证失败。

我知道用户可以从文件 ~/.ssh/known_hosts 中删除第 37 行,下次她会收到是/否提示。我想要的是让用户不知道整个机器替换过程,而只需收到输入密码的提示。

怎么做?

答案1

作为埃莎贝尔如上所述,您可以将当前主机密钥复制到新服务器。

您可以通过打开文件找到主机密钥sshd_config(在我的 Ubuntu 12.04 机器上是/etc/ssh/sshd_config)。在配置文件中查找HostKey条目。这些条目将告诉您主机密钥文件的位置。您应该能够将这些文件复制到新服务器并更新新服务器sshd_config以指向复制的密钥(或仅覆盖新服务器上已存在的文件)。

另外,请注意sshd_config手册页中的这一部分,特别是有关权限的部分:

指定包含 SSH 使用的私有主机密钥的文件。/etc/ssh/ssh_host_key对于协议版本 1, 默认值为/etc/ssh/ssh_host_dsa_key/etc/ssh/ssh_host_ecdsa_key对于/etc/ssh/ssh_host_rsa_key协议版本 2,默认值为 。请注意,如果文件是组/全局可访问的,sshd(8) 将拒绝使用该文件。可以有多个主机密钥文件。“rsa1”密钥用于 SSH 协议的版本 1,“dsa”、“ecdsa”或“rsa”用于 SSH 协议的版本 2。

答案2

如果您有原始主机密钥,您可以恢复它,这将停止错误。

或者,您可以在 sshd 配置文件中关闭 StrictHostKeyChecking。

...然而,这样做是一个非常非常糟糕的想法。 如果有一种方法可以让你只ssh-keygen -R server.example.com在客户端机器上运行,那将是最好的方法——因为关闭主机密钥检查就像说,“嘿。攻击我。”当事情发生变化时,我想要模糊性,但安全性应该是第一要务,而不是模糊变化。

答案3

你可以这样尝试

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"' 

请注意,如果文件夹 .ssh 尚不存在,则上述命令将失败。此外,在创建文件时设置最小权限(基本上只有所有者可以读写)可能会更好。以下是更高级的命令:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

要进一步了解此问题,请访问此网站:SSH 主机密钥更改错误

相关内容