AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 506864
Accepted
spuder
spuder
Asked: 2013-05-11 15:04:19 +0800 CST2013-05-11 15:04:19 +0800 CST 2013-05-11 15:04:19 +0800 CST

关闭对 ssh 密钥的严格检查

  • 772

每个用户每天创建和销毁 15 个以上的虚拟机。VM 在公司内部的 OpenStack 云中创建。

每当一个新的虚拟机被分配一个之前已经分发过的 IP 地址时,用户就会得到可怕的主机密钥验证失败错误。known_hosts这是因为 ssh 密钥与用户文件中的 IP 地址不匹配。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xxxxxxxxxxx
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

我能看到的两个解决方案是:

  • 关闭严格检查 - (安全风险)
  • 让用户运行ssh-keygen -RipAddress-(用户已经厌倦了这个解决方案,从那以后每天都会多次遇到它)

有什么方法可以防止此错误消息,同时保持安全?也许只关闭特定子网的安全检查?

ssh
  • 4 4 个回答
  • 35991 Views

4 个回答

  • Voted
  1. Best Answer
    Hauke Laging
    2013-05-11T15:21:00+08:002013-05-11T15:21:00+08:00

    强大的功能HostKeyAlias可以解决您的问题:

    ssh -o HostKeyAlias=hostkeyalias__vm_2013-05-11_07 user@host
    

    在 中创建一个条目hostkeyalias__vm_2013-05-11_07(没有 IP)known_hosts。当然,您可以编写一个脚本或 shell 函数,在每次 ssh 调用之前设置该值。或者你使用一个 shell 变量:

    HOSTKEYALIAS=hostkeyalias__vm_2013-05-11_07
    ssh -o HostKeyAlias=$HOSTKEYALIAS user@host
    

    并$HOSTKEYALIAS在 VM 更改时更改。不时应从中删除旧条目known_hosts。

    • 21
  2. hackerb9
    2019-01-30T10:53:24+08:002019-01-30T10:53:24+08:00

    问题在于ssh假定 IP 地址和主机之间存在一对一的映射。我们只需要为您的云服务器的 IP 地址打破该映射。

    解决方案

    将以下节添加到您的~/.ssh/config文件中。

    # Disable HostKey checking for servers which frequently change keys
    Host 172.16.24.32  172.16.24.33  172.16.24.34
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
    

    只需更改 IP 地址即可。 ¹

    可选:IP 地址范围的替代方案

    如果您想将此应用到网络块,例如 192.168/16,您可以像这样使用通配符:

    # Do not keep HostKeys for internal networks.
    Host 10.*.*.*  192.168.*.*
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
    

    可选:使用主机名

    最初的问题提到了 IP 地址,但您当然可以改用主机名。例如,这将匹配ssh instance32.vm.yoyodyne.com:

    Host *.vm.yoyodyne.com
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
    

    如果您想同时使用主机名和 IP 地址,则需要明确指定两者,因为 SSH 与解析的IP 地址不匹配。例如,如果您有ssh ourvm.local以下快捷方式ssh 192.168.1.53:

    Host 192.168.1.53  ourvm.local
        UserKnownHostsFile /dev/null
        StrictHostKeyChecking no
    

    警告

    ssh规避的安全模型时要小心。特别是,仔细检查您的通配符是否与主机密钥不会更改的任何正版服务器不匹配。


    ¹为什么是 /dev/null?我将 KnownHosts 数据放入位桶中,因为只有设置StrictHostChecking no会删除警告,但仍然拒绝连接。这很愚蠢,所以我认为 OpenSSH 最终会改变行为或添加新选项。如果出现更好的解决方案,我会更新这个答案。

    • 15
  3. Douglas Land
    2013-05-11T18:13:53+08:002013-05-11T18:13:53+08:00

    ~/.ssh/config使用以下内容创建:

    Host *
        StrictHostKeyChecking no
    

    或者,您可以为 ssh 创建别名以:

    ssh -o StrictHostKeyChecking=no
    
    • 11
  4. Lorin Hochstein
    2013-05-13T20:02:26+08:002013-05-13T20:02:26+08:00

    您可以从 VM 控制台检索新的主机密钥,并在实例启动后更新已知的主机文件。

    • 0

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve