如何在bash脚本中添加SSH已知主机?


13

我正在创建一个bash脚本来配置可以将Web应用程序部署到的新服务器。我一直要做的一件事是将GitHub作为使用的已知主机ssh git@github.com。如何在bash脚本中自动执行此过程,并以幂等的方式进行呢?

Answers:


17

一个简单的方法就是做这样的事情。

ssh-keyscan remote_server >>~/.ssh/known_hosts

如果此框是全新的,则~/.ssh在运行ssh-keyscan之前,可能还需要创建目录。

请记住,ssh-keyscan可以采用任意数量的主机名。它会获取所有可能的密钥。


1
PS-对于配置,您应该使用类似puppet的东西,而不是bash脚本。对于木偶,可以使用sshkey资源轻松处理。另请参阅此问题,以获取一种用于管理known_hosts的方法serverfault.com/a/416782/984
Zoredache 2013年

2
这对我来说听起来确实不错,但是在每个人都花了几个小时玩完木偶和竞争对手之后,我又回到了bash脚本和理智的角度。如果这些工具很直观,我显然没有直觉。YMMV。
罗恩·伯克

使用bash。我经常遇到诸如木偶或ansible之类的不同版本的问题。我们总是回到bash ...现在有3家公司像这样运作,bash对我们而言始终是可靠的。
Ligemer '16

4

您是否要自动接受新密钥?如果是这样,则可以使用-oStrictHostKeyChecking = no。
这样做是一个非常糟糕的主意,因为您现在完全可以接受中间人攻击。

更好的选择是仅在管理新服务器时管理known_hosts文件并重新使用该文件。将其粘贴在github上并编写一个简单的脚本以下载该文件,然后再将其切入github。

严格的主机密钥检查是一件好事。


您能否详细介绍“ managen_hosts文件的管理”?我认为这是我想要做的,但是当我查看文件时,它的内容看起来像某种哈希/键,并且看起来不像是要手动管理的东西。
安德鲁

2
设置一个新服务器,像手动将ssh手动放入github。在出现提示时接受主机密钥。登出。从该新配置的服务器中复制〜/ .ssh / known_hosts到其他地方(github,Web服务器,只要您能获得它就没关系)。下次配置服务器时,请先将该文件复制回sshing到github。您无需编辑文件。
yoonix 2013年

这比我的答案更好(更安全)。但是,对yoonix答案的进一步改进是解析“ ssh-keyscan github.com”并将返回的密钥存储到〜/ .ssh / known_hosts中,这样它就不会在您需要更新的文件中是静态的。
Sirex 2013年

那也可以,但是我认为不会更好。如果您每次都抓住一个新的主机密钥,则很可能将自己设置为中间人攻击。
yoonix

1
为了澄清我的最后一条评论(为时已晚,无法编辑):每次设置主机时,抓住新的主机密钥在功能上与设置StrictHostKeyChecking = no没有区别。使用它们中的任何一个,您都盲目地信任每次配置时发送的任何密钥。如果您认为不太可能发生MITM攻击,请阅读 两篇文章。Github将是一个巨大的目标。
yoonix

1

我不确定我是否理解这个问题,但是在这种情况下,我认为您想忽略known_host提示或完全避免使用它:

ssh -o StrictHostKeyChecking =否

或其他建议,网址为:http : //www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


我想要一种非交互式的方式来接受GitHub主机密钥(因为这将在bash脚本中发生)。
安德鲁

那么它将起作用-尽管它不会接受密钥,但会完全忽略它。Yoonix的答案更好
Sirex
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.