如何配置 SSH 服务器以使用特定的公钥?

如何配置 SSH 服务器以使用特定的公钥?

我有一个双启动的 Windows 7 / Ubuntu 12.04 桌面,并在两者中都安装了 openSSH 服务器(在 Windows 下使用 cygwin64)。我从运行 Ubuntu 12.04 的笔记本电脑连接到 Cygwin64 openSSH 服务器,并~/.ssh/known_hosts正常添加了一个条目。现在,我尝试连接到 Ubuntu openSSH 服务器(相同的 IP,域名),但出现错误:

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 

这当然是因为在同一台机器上运行不同操作系统的两台服务器创建了不同的公钥和相应的指纹。有没有办法同步它们(即将所有公钥信息从一个复制到另一个)?

答案1

这不是解决问题的最佳方法。如果您将 Ubuntu 端配置为使用与 Windows 中不同的 IP 地址,则不会出现此问题。

如果您不能这样做,更直接的解决方案是禁用笔记本电脑上该主机的主机密钥检查。

请注意,这样做将阻止 ssh 警告您有关中间人攻击,即有人在您的网络上冒充您的双启动系统,但发生这种情况的可能性非常低。

要禁用主机密钥检查,请将以下内容添加到 ~/.ssh/config 或 /etc/ssh/ssh_config 的顶部:

Host <HOSTNAME OR IP ADDRESS>
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

“StrictHostKeyCheck no”选项将阻止您的笔记本电脑检查远程主机标识,“UserKnownHostsFile=/dev/null”选项将导致 ssh 将远程主机的标识保存到 /dev/null,这意味着它不会被保存。

答案2

对于协议版本 1,默认主机密钥文件为 /etc/ssh/ssh_host_key;对于协议版本 2,默认主机密钥文件为 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key。尝试将这些文件从 Ubuntu 系统复制到 Cygwin 系统(或反之亦然)。

另一个选择是使用 sshd_config 中的 HostKey 配置选项指向两个系统上相同的备用主机密钥文件。

相关内容