有没有办法暂时忽略我的~/.ssh/known_hosts文件?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 


注意:

..通过一些答案/评论( s)我意识到我的问题有点误导,所以这是预期的行为,所以这很正常(就我而言)背后有一个有效的理由说明为什么我想看到“忽略它”)

评论

您问错了问题。您不应该“忽略”这个问题。您应该弄清楚发生了什么并解决它。

我无法代表用户,但是一个示例是您正在开发自动安装过程(例如kickstart)的情况,您的迭代工作流程涉及构建,连接,测试,修改构建过程以及从一遍又一遍。

@MichaelHampton-由于VMware和VirtualBox会为来宾回收IP地址,因此我一直都能得到这一信息。对我来说,这是正确的问题:)

FWIW我一直在寻找这个答案,因为我的局域网中有一个系统,在该系统中,我使用dropbear(具有不同的主机密钥)在启动过程中输入磁盘加密密码。

@jww这是您的方案的错误问题/解决方案。相反,您应该将SSH配置为忽略IP地址,但仍然检查主机密钥。在此处查看示例

#1 楼

您可以使用ssh -o StrictHostKeyChecking=no暂时关闭对known_hosts的检查。但是我建议不要这样做。您应该真正检查主机密钥为何已更改。

另一种选择是在您的~/.ssh/config中为有问题的主机添加特定的条目。如果您有一个特定的主机,该主机每次重新启动时都会生成新的主机密钥,并且由于某种合理的原因而每天重新启动几次,则这可能是有效的方法。

Host <your problematic host>
  StrictHostKeyChecking no


评论


这是预期的行为),因此很正常(以我为例)

– alexus
2013年12月7日20:22

@alexus如果它是“预期的”,则可以将该选项应用于您希望其发生的特定主机名/ IP。

–克莱里斯-谨慎乐观-
13年12月7日在20:25

@alexus并请记住,如果执行此操作,您将几乎失去ssh提供的所有保护。您可能还使用telnet,因为有人对MITM进行捕获并捕获您的所有流量将是微不足道的。

–迈克尔·汉普顿
2013年12月7日20:44

这不再起作用(至少对于OpenSSH_5.3p1)

–死亡
17年1月12日在16:36

-o StrictHostKeyChecking = no删除使用密码登录的功能。缺少标记是否直接违反允许用户强制行为的UNIX原则?我目前正在尝试使用本地IP登录到本地计算机。主机密钥已更改,因为我重新格式化了该机器。这里的一切都有意义,在这种情况下,没有任何安全风险。

–Wowfunhappy
19-09-26在23:28

#2 楼

要完全忽略POSIX环境中的已知主机文件,请将GlobalKnownHostsFileUserKnownHostsFile选项设置为/dev/null

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

设置StrictHostKeyChecking=no选项将允许您连接,但是SSH将仍然显示警告:

ssh -o StrictHostKeyChecking=no user@host

正如其他人指出的那样,解决潜在的问题可能更好。例如,您可以考虑使用SSH证书身份验证来验证主机。

评论


这可能是比目前最高的答案更好的答案,因为它允许使用密码身份验证,否则该身份验证将被禁用(当然,在输入密码之前,您应该了解自己到底在做什么……)

– VZ。
15年4月8日在21:55

我在这里有些困惑:除了-o GlobalKnownHostsFile = / dev / null -o UserKnownHostsFile = / dev / null选项之外,您还应该不使用-o StrictHostKeyChecking = no吗?-的最终答案是:ssh -o GlobalKnownHostsFile = / dev / null -o UserKnownHostsFile = / dev / null -o StrictHostKeyChecking =没有user @ host?

–加百利·斯台普斯
19年11月1日在16:28



我在网上找到的相关文章:shellhacks.com/disable-ssh-host-key-checking

–加百利·斯台普斯
19年11月1日在16:31



-o UserKnownHostsFile = / dev / null(与StrictHostKeyChecking = no结合使用)使我静音警告:远程主机标识已更改,这是在关闭主机后再次打开主机电源时发生的(在本例中为重新生成密钥)。谢谢!

–fabiomaia
20/09/17'8:55

#3 楼

如果您已重新安装服务器,并且标识已更改,则只需从/Users/alexus/.ssh/known_hosts删除指定的行155,然后继续。

如果在不同的专用网络之间切换,则应使用主机名代替,因为ssh客户端还将根据主机名保存密钥。在您的/etc/hosts中添加类似的内容:

10.52.11.171 server1
10.52.11.171 server2


,然后在连接到子网1时使用ssh server1,在连接到子网2时使用ssh server2。这样,两个服务器都可以具有不同的主机密钥。

评论


如果您在两个专用网络之间切换并连接到两个相同的IP,该怎么办?

– alexus
2013年12月7日在22:51

我已经编辑了答案。

–etagenklo
2013年12月7日23:05

@alexus然后您需要IPv6 :)但这在您最初的问题中将是有用的信息。

–迈克尔·汉普顿
2013年12月7日23:06

#4 楼

有人说这是不对的,您不应该这样做,等等,但是我还需要这样做一次又一次地测试几个嵌入式设备。
您需要禁用StrictHostKeyChecking=no,这是正确的,但是将已知的主机文件重置为/dev/null。这是一个在远程设备上具有自动登录和ps的示例。

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'


#5 楼

-o StrictHostKeyChecking=no仅在known_hosts文件中不存在主机的情况下有效。

如果您认为主机密钥可能由于vm cloning而改变,则我认为它更干净(无警告),以强制忽略这些密钥像这样的主机:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"


#6 楼

我的别名:
ssh='ssh -q -o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null'


评论


您永远不要100%地忽略此类消息。这样做会使您遭受MITM攻击。

–迈克尔·汉普顿
20/12/31在20:23

#7 楼

登录到所有服务器(如果是RedHat,则登录到rm -f /etc/ssh/ssh_host_*),然后重新启动SSHD。

这将创建不需要忽略的新SSH主机密钥。

我只能想到一个实例,该实例不仅需要在多个服务器上克隆SSH密钥,而且不会引发任何警告。
一个A记录的多个。具有A记录的所有主机都具有相同的键。

评论


这个答案是不正确的。指纹在客户端上是本地的。

– 89c3b1b8-b1ae-11e6-b842-48d705
14年4月14日在21:35