暂时忽略我的〜/ .ssh / known_hosts文件?


48

有没有办法暂时忽略我的~/.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$ 

注意:

..通过一些答案/评论,我意识到我的问题有点误导,因此,简短来说是预期的行为),因此(对于我而言)这是正常的(就我而言)想要看到“忽略它”)


9
您问错了问题。您不应该“忽略”这个问题。您应该找出问题所在并加以解决。
迈克尔·汉普顿

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

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

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

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

Answers:


56

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

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

Host <your problematic host>
  StrictHostKeyChecking no

这是预期的行为),所以这很正常(就我而言)
alexus 2013年

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

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

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

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

31

要完全忽略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证书身份验证来验证主机。


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

我有点困惑在这里:你不应该使用-o StrictHostKeyChecking=no 除了-o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null选项-对于一个最终的答案?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host
Gabriel Staples

我在网上发现的相关文章:shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples

5

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

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

10.52.11.171 server1
10.52.11.171 server2

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


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

1
我已经编辑了答案。
etagenklo 2013年

2
@alexus然后您需要IPv6 :)但这在您最初的问题中将是有用的信息。
迈克尔·汉普顿

2

-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"

2

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

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

-2

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

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

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


6
这个答案是不正确的。指纹在客户端上是本地的。
89c3b1b8-b1ae-11e6-b842-48d705
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.