ssh,接受同一个服务器IP的两个密钥指纹

Bow*_*ark 6 dual-boot ssh openssh

ssh客户端(默认情况下,至少在 Ubuntu 18.04 和 FreeBSD 12 中)始终检查服务器的密钥指纹是否在known_hosts文件中。

我在局域网中有一台主机,它有双引导;两个操作系统都使用相同的静态 IP。我想连接ssh到他们两个,而不会遇到错误。

这显然违反了对 进行的检查known_hosts:如果我接受一个指纹,它将与主机 IP 相关;切换操作系统时,指纹改变,而IP不变,我需要手动删除它known_hosts才能再次连接。我希望在考虑该 IP 时接受一个另一个指纹。

是否有解决此问题的客户端解决方案?

我正在使用OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017

注意:我不想对服务器的指纹进行“不检查”。我只是想知道是否有可能将两个替代指纹(不仅仅是一个)与服务器的 IP 地址相关联。

Phi*_*ing 6

您的问题是主机密钥就是这样,它们是主机的密钥。每个主机实际上应该只有一个。当然有多种,因为有多种类型的密钥,但我会避免依赖密钥类型来为单个主机提供多个可接受的密钥。

\n

在服务器端

\n

我的第一个建议是,如果您真的想在客户端执行此操作,请仔细考虑。您可以将这两个操作系统视为同一主机,只需将主机密钥从一个操作系统复制到另一个操作系统即可。

\n

如果/etc/ssh/ssh_host*从 OpenSSH 复制,您可以在其他操作系统上使用它们。尽管它们可能需要一些重新格式化,具体取决于您运行的 SSH 服务器。

\n
\n

但 ...

\n
\n

请问为什么您排除了服务器端解决方案?最简单的方法不是尝试让两个操作系统使用相同的主机密钥吗?\xe2\x80\x93 菲利普·库林

\n

@PhilipCouling 部分是为了易于使用:操作系统之一是 Windows。部分原因是不要将密钥从主机转移到另一个主机,这种做法有时不被鼓励。但主要原因是:如果可能的话,我希望在 ssh 客户端配置中获得一定程度的灵活性。\xe2\x80\x93 弓公园

\n
\n

我认为您正在寻找一种将两个操作系统视为不同主机的方法,即使它们共享 IP 和端口号。

\n
\n

在客户端

\n

也许最可靠的方法是为每个操作系统设置主机特定配置。编辑(或创建)~/.ssh/config以添加:

\n
Host windows.dualbootbox\n    Hostname 192.168.10.20\n    UserKnownHostsFile ~/.ssh/windows.dualbootbox.known_hosts\n\nHost ubuntu.dualbootbox\n    Hostname 192.168.10.20\n    UserKnownHostsFile ~/.ssh/ubuntu.dualbootbox.known_hosts\n
Run Code Online (Sandbox Code Playgroud)\n

您无需指定Hostname每个地址是否Host已解析为 IP。看man ssh_config参考资料 了解更多配置选项。

\n

通过上述配置,您可以:

\n
ssh user@windows.dualbootbox\nssh user@ubuntu.dualbootbox\n
Run Code Online (Sandbox Code Playgroud)\n