我想通过SSH连接到主机,但不希望将主机名添加到我的~/.ssh/known_hosts中。

我该怎么做?

#1 楼

如果由于使用云服务器(AWS EC2,Rackspace CloudServers等)而需要这种行为,或者您在Vagrant中不断配置新映像,则可能需要更新SSH配置,而不是在服务器上添加bash别名或更多选项。命令行。考虑添加以下内容:

Host *.mydomain.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User foo
  LogLevel QUIET



尽可能严格地使用正则表达式来确保主机安全。
将LogLevel设置为QUIET可以防止出现纪尧姆提到的警告


评论


您确实应该尝试不完全禁用StrictHostKeyChecking,因此cclark的答案对于使用云服务器是一个很大的折衷。

– Alex Recarey
2012年9月24日在16:39

当我针对Vagrant使用Shipit(JavaScript部署工具)时,这对我非常有用。我无法轻易获得Shipit传递给SSH的参数,因此这使我可以回避该工具,并告诉它我做了什么并且不想记住它。

–约翰·芒施(John Munsch)
2015年3月11日,下午3:06

LogLevel是我一直在寻找的东西。它具有附加优势,即在运行脚本时不显示公司配置的通知! (我现在正在运行,日志级别为ERROR)

– Anshu Prateek
2015年8月4日在3:46



我要在哪个文件中添加它?

– Wim Deblauwe
17年5月18日在12:06

这是您的SSH配置文件。在Linux或macOS中,文件通常位于主目录中名为.ssh的目录中,名为config-〜/ .ssh / config

–克拉克
17年5月18日在12:09

#2 楼

-o "UserKnownHostsFile /dev/null"


应该工作。

评论


按预期工作,但是它将始终报告:“警告:将'hostname,ip'(RSA)永久添加到已知主机列表中。“我用2>&1 | grep -v“ ^警告:永久添加”

–纪尧姆·布德罗(Guillaume Boudreau)
2011年5月18日17:34



添加-o“ LogLevel ERROR”,它将不再显示警告警告

–约翰
16-9-29在2:37

注意:禁止显示该消息的请求“警告:将'hostname,ip'(RSA)永久添加到已知主机列表中。“被报告给维护者bugzilla.mindrot.org/show_bug.cgi?id=2413

– Ben Creasy
17-10-4在2:14



管道到grep将合并stdout和stderr;退出状态也会改变。如果使用bash,最好使用进程替换来消除该消息:ssh 2>>(egrep>&2 -v'^警告:永久添加')-o“ UserKnownHostsFile / dev / null” [... ]。这样可以避免管道,从而避免出口状态处理中的相应变化。

– Alex O
17-10-10在11:48

@John最好在这些注释中使用其他方法之一,否则您将引入安全漏洞,因为它可能隐藏其他不相关的警告

–乔恩·本特利
19 Mar 5 '19 at 14:21

#3 楼

对于单个ssh会话,请使用此

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host


#4 楼

我觉得要将主机密钥添加到您的known_hosts(根据我的经验,运行这些服务的人们至少足够聪明,可以使服务于相同主机名的计算机之间的主机密钥保持一致),然后打开StrictHostKeyChecking,关闭CheckHostIP和使用LogLevel ERROR进行日志记录将在不牺牲安全性的情况下为您提供最佳体验。 (好吧,没有CheckHostIP,您确实需要信任DNS,如果没有广泛的DNSSEC或类似的东西,这是一个巨大的漏洞;但是我们暂时将其扫一扫。)

我使用一个只读的known_hosts文件,因此我必须做一些事情,否则会收到关于无法将条目添加到known_hosts的无休止的警告。

我使用的内容:

Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR


我希望这些服务通过HTTPS在其网站上发布其SSH主机密钥,因此我可以显式复制它们,而不必先连接就可能使自己遭受MITM攻击。

#5 楼

我建议

LogLevel ERROR


over

LogLevel QUIET


,这样您仍然会收到“无法解析主机名”等错误

评论


您应该能够信任您的SSH连接,恕我直言。不仅让您对风险保持沉默。

–西尔维努尔格
15年1月23日在9:16

真的取决于。我们的开发环境每周都会被拆除并重建,它们的A记录保持不变,但每次构建时都会生成其主机密钥。我们不能保留主机密钥,因为A记录只是基于环境名称在数据库中定义的,并且可以随时删除环境名称或创建新的环境名称,因此上述解决方法确实有用。

– Alex Berry
17年6月27日在8:59

#6 楼

您是否尝试禁用StrictHostKeyChecking?您可以使用-o选项或在配置文件~/.ssh/config中进行操作。

评论


我已经在用了。但是它具有不同的效果:降低了主机密钥检查的严格性。即如果主机未知,则在禁用该选项时仍会连接。因此,它仍然可以保存主机。但是我想我已经找到了正确的解决方案(请参阅我的答案)。

–阿尔伯特
2010年5月15日,0:29

#7 楼

我发现以下.ssh / config条目很有用(具有DHCP和DNS的LAN):

 CheckHostIP no

 Host *.*
 CheckHostIP yes


结果是本地计算机名称“ zora”或“ goron”将不检查针对动态分配的IP地址,但www.mycompany.com或node42.planetlab.com仍将确认其静态IP。