如何在 ssh 中禁用严格的主机密钥检查?

kar*_*k87 313 ssh

我想ssh为 Ubuntu 11.04禁用严格的主机密钥检查。怎么做?

Cae*_*ium 302

在您的~/.ssh/config(如果此文件不存在,只需创建它):

Host *
    StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

这将为您连接的所有主机关闭它。*如果您只希望将其应用于某些主机,则可以将 替换为主机名模式。

确保文件的权限仅限于您自己访问:

sudo chmod 400 ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

  • 这在很多情况下是不明智的,通常你只想禁用一次:`ssh -o UserKnownHostsFile=/dev/null` (11认同)
  • 制作一个 - 文件的全部内容都在我上面的引用中。注意它也在你的 homedir 的 `.ssh` 子目录中。 (7认同)
  • mkdir -p ~/.ssh && echo "Host *" > ~/.ssh/config && echo " StrictHostKeyChecking no" >> ~/.ssh/config (3认同)
  • 我的主目录中没有名为 `config` 的文件。 (2认同)

Mar*_*kHu 291

与其将它添加到~/.ssh/config所有 Host * 的文件中,不如指定一个特定的主机更安全。

您还可以像这样在命令行上传递参数:

ssh -o StrictHostKeyChecking=no yourHardenedHost.com
Run Code Online (Sandbox Code Playgroud)

  • 那行不通。它应该是`ssh -o UserKnownHostsFile=/dev/null`。 (34认同)
  • @qwertzguy 它确实有效。您的选择将使主机密钥每次都丢失,这很有用且更安全,但不是问题所要求的。 (3认同)
  • @MarkHu 要避免显示此警告,只需添加 `-o LogLevel=ERROR` (3认同)
  • 对我都使用,ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no (2认同)

pac*_*ist 148

值得指出的是,您的 ssh 配置中的设置:

StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

这意味着主机密钥仍会添加到 .ssh/known_hosts - 您不会被提示是否信任它们,但如果主机更改,我敢打赌您会收到有关它的重大警告。您可以通过添加另一个参数来解决此问题:

UserKnownHostsFile /dev/null
Run Code Online (Sandbox Code Playgroud)

这会将所有这些“新发现的”主机添加到垃圾箱。如果主机密钥更改,则没有问题。

我不会提到绕过主机密钥上的这些警告有明显的安全后果 - 你应该小心你这样做是出于正确的原因,并且你实际上连接的你想要连接而不是一个恶意主机,因为此时您已经侵蚀了 ssh 作为解决方案的主要安全性。

例如,如果您尝试使用命令行进行设置,则完整命令将是:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host
Run Code Online (Sandbox Code Playgroud)

不过这很愚蠢 - 鉴于上面的 ssh 配置文件的工作示例在所有情况下都可能更有意义。

  • 为 `ssh -o StrictHostKeyChecking=no -o UserKnownHostFiles=/dev/null user@host` 取一个别名可能会很方便。就我而言,我使用 `issh` 连接到我知道主机密钥更改的主机。 (7认同)
  • @ecerulm - 只是一个小错字:它是“UserKnownHostsFile”而不是“UserKnownHostFiles”。 (2认同)
  • @LeeMeador 在您的 Docker 容器中没有 `known_hosts` 文件*因为没有人把它放在那里*。不是因为 ** 不能 ** 是一或 ** 永远不会 ** 是一。**可以**有一个。您可以在构建时复制一个,或者在 docker 运行时挂载一个,或者使用另一种安全机制从容器内部获取一个。如果这个安全问题对您的组织来说足够重要,那么您可以在 CI/CD 流程中创建一个发现和交付系统,以便在您的 Docker 镜像中拥有一个更新的 `known_hosts` 文件。 (2认同)

小智 22

供参考。我更喜欢在使用 cssh 时禁用主机检查。

alias cssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
Run Code Online (Sandbox Code Playgroud)

  • `alias relay='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null 11086695@172.26.19.19 -p 2222'` 为我工作 (2认同)

qwe*_*guy 13

如果您想一次性禁用,请使用:

ssh -o UserKnownHostsFile=/dev/null
Run Code Online (Sandbox Code Playgroud)

如果主机密钥更改,这也将起作用,并确保不将密钥保存为受信任以增加安全性。


ale*_*ray 7

听起来像

NoHostAuthenticationForLocalhost yes
Run Code Online (Sandbox Code Playgroud)

可能对你来说已经足够好了。而且您仍然能够保持这种安全感。