我在nat防火墙后面有2个ssh服务器,每天都会改变它的wan IP.它们在给定时间内始终处于相同的WAN IP地址,但在不同的端口上.
我这样连接到服务器A:
ssh -p 22001 karl@x1.example.com
和服务器B:
ssh -p 22002 karl@x2.example.com
所以我为同一个IP获得了2个不同的主机密钥,并且当IP改变同一主机的不同IP时也是如此.
我必须在known_hosts文件中一遍又一遍地删除其他密钥或旧密钥(在IP更改的情况下).
我不愿意关闭密钥验证,因为这样会不那么安全.但是始终获得警告也是不安全的(因为我一直忽略这样的警告).有更好的解决方案吗?
这与我在这里的旧问题有关,但不一样:
具有2个DNS名称的服务器上的SSH登录警告消息
我认为这会奏效:
config
在.ssh
目录中创建一个文件,如下所示:
Host server1 Hostname x1.example.com HostKeyAlias server1 CheckHostIP no Port 22001 User karl Host server2 Hostname x2.example.com HostKeyAlias server2 CheckHostIP no Port 22002 User karl
下面的解释(来自man ssh_config
)
CheckHostIP
如果此标志设置为"yes",则ssh(1)将另外检查known_hosts文件中的主机IP地址.这允许ssh检测主机密钥是否因DNS欺骗而更改.如果该选项设置为"no",则不会执行检查.默认值为"是".
HostKeyAlias
在主机密钥数据库文件中查找或保存主机密钥时,指定应使用的别名而不是实际主机名.此选项对于隧道连接SSH连接或在单个主机上运行的多个服务器非常有用.
在Username
与Port
线避免你不得不放弃在命令行上这些选项,也因此你可以使用:
% ssh server1 % ssh server2