ssh
客户端(在默认情况下,至少在Ubuntu18.04和FreeBSD 12中)总是检查服务器的密钥指纹是否在known_hosts
文件中。
我在局域网中有一个主机,它具有双重引导;两个OSs都使用相同的静态IP。我想通过ssh
连接到他们两个,而不会遇到错误。
这显然违反了在known_hosts
上执行的检查:如果我接受一个指纹,它将与主机IP相关;当操作系统被切换时,指纹会发生变化,而IP是相同的,我需要在known_hosts
中手动删除它,然后才能再次连接。我希望在考虑该IP时,一个指纹或另一个指纹被接受。
是否有客户端解决方案来解决这个问题?
我正在使用OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018
和OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
。
注意:我不想要“没有检查”服务器的指纹。我只是想知道是否有可能将两个替代指纹(而不仅仅是一个指纹)与服务器的IP地址联系起来。
发布于 2019-05-28 09:35:00
您的问题是,主机密钥只是,它们是主机的密钥。每一个主人只有一个。当然有几个键,因为有几种类型的键,但是我将避免依赖键类型为单个主机提供多个可接受的键。
服务器端的
我的第一个建议是,如果您真的想在客户端这样做,请仔细考虑。您可以将这两个操作系统视为同一个主机,只需将主机密钥从一个复制到另一个。
如果您从/etc/ssh/ssh_host*
复制OpenSSH,您可以在其他操作系统上使用这些。尽管它们可能需要根据您运行的SSH服务器进行一些重新格式化。
请问您为什么排除服务器端的解决方案?难道最简单的方法不是让两个操作系统都使用同一个主机密钥吗?-PhilipCouling @PhilipCouling,部分原因是为了方便使用:操作系统之一是Windows。部分原因是不将密钥从主机转移到另一个主机,这有时是一种不鼓励的做法。但主要原因是:如果可能的话,我希望在ssh客户端配置中获得一定程度的灵活性。- BowPark
我认为,您正在寻找的是一种方式,将这两个操作系统作为不同的主机,即使他们共享一个IP和端口号。
客户端的
也许最可靠的方法是为每个操作系统设置特定的主机配置。编辑(或创建) ~/.ssh/config
以添加:
Host windows.dualbootbox
Hostname 192.168.10.20
UserKnownHostsFile ~/.ssh/windows.dualbootbox.known_hosts
Host ubuntu.dualbootbox
Hostname 192.168.10.20
UserKnownHostsFile ~/.ssh/ubuntu.dualbootbox.known_hosts
如果每个Hostname
已经解析为IP,则不需要指定Host
。有关更多配置选项,请参见man ssh_config
。
使用上面的配置,您可以选择:
ssh user@windows.dualbootbox
ssh user@ubuntu.dualbootbox
发布于 2019-05-27 09:50:56
这样做的方法很多,一种方法是在对主机执行ssh操作时使用StrictHostKeyChecking no
,它不会在known_hosts中输入任何条目。
ssh -o StrictHostKeyChecking=no <ip>
或
ssh -o UserKnownHostsFile=/dev/null <ip>
也可以根据需要修改. .ssh/config文件。
https://unix.stackexchange.com/questions/521269
复制相似问题