我经常需要连接到多个 VPN 网络和提供商后面的主机,地址为10.0.0.*
或192.168.*.
也就是说,每个 VPN 网络在连接时都可以自由保留这些范围中的任何一个。因此,我不能假设将地址绑定10.0.0.*
到特定主机,因为这取决于我连接到哪个 VPN。或者甚至解析到我的无线路由器!
出于这个原因,我明确禁用了对与上述匹配的这些“内部网”地址的主机的严格密钥检查,在我的~/.ssh/config
:
Host 192.168.* 10.0.0.*
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null
我通过谷歌搜索以及阅读其他 SO 问题和答案找到了这些说明。
问题是,每次我连接到上面的地址范围时,例如ssh 10.0.0.16
,它都会告诉我:
Warning: Permanently added '10.0.0.16' (RSA) to the list of known hosts.
坦白说,这是不正确的,因为无处不在/dev/null
(我个人认为它经常被用作丑陋的黑客手段)——在 中添加任何东西都不是永久性的/dev/null
,不是吗?它只会弄乱我的终端,每次我在那里看到它,我都会感到很沮丧。
有没有办法让 ssh 忽略指纹而不打印上面令人困惑的消息?我不想alias ssh='ssh 2>/dev/null'
这样做,或者做任何类似的事情。我是不是做错了?我有什么选择?也许还有其他选择?/dev/null
在我看来,这是一种黑客行为,这就是我受到惩罚的原因。
我不想做在我的客户端将节点别名为某些主机名~/.ssh/config
,例如这个答案。这是因为两个原因:
我无法简单地将 ssh 配置为使用别名(使用指令
Host
)来解析到特定地址 fe,正是因为我连接到的不同 VPN 提供商会重复使用这些地址 -10.0.0.15
例如,连接到一个 VPN 时可能是一台主机,连接到另一个 VPN 时可能是另一台主机。我应该将我的“拆分”~/.ssh/config
为多个,每个 VPN 一个?并相应地使用这些配置文件?有问题的节点可能是同一内联网上一个相当大的节点组的一部分,现在称之为“云”。节点数量最多可达一百个。我不太清楚如何将多个这样的节点“批量映射”到它们各自的地址?
答案1
我知道这是一个老问题,但我也在寻找答案。因此,对于任何未来的谷歌用户来说,以下是我找到的答案。
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host
您可以将其绑定到别名以方便使用。
alias ssh-nocheck='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
ssh-nocheck user@host
找到答案https://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html
-编辑:格式化
答案2
通过忽略真实性检查,您将面临中间人攻击,因此您可能需要重新考虑。
您可能需要修改 SSH 配置,方法是将“CheckHostIP”设置为 no,然后在 hosts 文件中为每个主机设置条目,并通过名称而不是主机进行连接。(请注意,我还没有尝试过这个,但我相信它会起作用)。有一个看这里也是如此。