修复服务器端的“远程主机标识已更改!”

修复服务器端的“远程主机标识已更改!”

请注意,该问题是为了修复“远程主机标识已更改!”问题。在服务器端

我知道这意味着什么,我也很清楚自己在做什么——

  • 我正在重新安装/升级我的服务器,并希望该过程尽可能顺利。
  • 在重新安装/升级过程中,我可能需要多次来回启动旧版本或新版本。

因此我需要尽可能地消除客户端的警告。否则,我需要~/known_hosts不必要地来回翻阅我的文件。

那么如何将我的新服务器的指纹/ECDSA 密钥设置为与以前相同?

答案1

更新:经过一番思考,我想我会将我的建议改为只复制密钥文件以及引用它们的配置条目。密钥文件都在 /etc/ssh/ 中,并且ssh_host_<keytype>_key每个文件都有相应的名称和扩展名的公钥文件.pub。以下是 dsa、ecdsa、ed25519 和 rsa 密钥的示例:

$ cd /etc/ssh
$ ls -l ssh_host_*key*
-rw------- 1 root root  668 Apr  8 03:43 ssh_host_dsa_key
-rw-r--r-- 1 root root  606 Apr  8 03:43 ssh_host_dsa_key.pub
-rw------- 1 root root  227 Apr  8 03:43 ssh_host_ecdsa_key
-rw-r--r-- 1 root root  178 Apr  8 03:43 ssh_host_ecdsa_key.pub
-rw------- 1 root root  411 Apr  8 03:43 ssh_host_ed25519_key
-rw-r--r-- 1 root root   98 Apr  8 03:43 ssh_host_ed25519_key.pub
-rw------- 1 root root 1679 Apr  8 03:43 ssh_host_rsa_key
-rw-r--r-- 1 root root  398 Apr  8 03:43 ssh_host_rsa_key.pub

/etc/ssh/sshd_config 中可能有HostKey一些条目告诉 sshd 使用它们。在我的例子中,这些文件只是默认文件,因此相关行被注释掉:

$ grep HostKey /etc/ssh/sshd_config 
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

您应该能够从原始服务器克隆密钥文件(确保与旧权限匹配),如果有未注释的HostKey条目,您也应该将它们添加到新配置sshd_config文件中。如果您在那里有任何其他非默认设置,您也需要复制它们。

我最初建议将整个/etc/ssh/目录从旧服务器克隆到新服务器。这样做的好处是它会自动复制您所做的任何其他设置更改。缺点(也是我决定不推荐它的原因)是旧配置可能不包含为提高安全性而进行的更改。

例如,您的旧配置可能没有包含自定义 Diffie-Hellman 模数的 /etc/ssh/moduli 文件,而新操作系统版本可能不会自动生成一个。这将是一个问题,因为默认模数不是很安全,而且由于每个人都使用相同的模数,对它的攻击就是对每个人的攻击。请参阅这里这里了解更多信息。

如果您的“旧”服务器配置不是太旧,它应该已经有一个自定义模块文件,但这只是一个例子;可能还有其他需要更新的东西,所以使用几乎全新的配置可能更好。顺便说一句,使用不同的模块不会导致“ID CHANGED”类型的错误,所以如果该文件存在于旧服务器中,您不需要复制它。

相关内容