Git说:“警告:已永久添加到已知主机列表中”


192

每次我使用git与远程交互时,例如在拉动或推动时,都会显示以下消息:

警告:将“ ...”(RSA)永久添加到已知主机列表。

如何防止显示此烦人的消息?这只是一个烦恼-一切正常。


1
你真的是每次吗?是给您提示形式The authenticity of host '...' can't be established. RSA key fingerprint is .... Are you sure you want to continue connecting (yes/no)?,还是您取消了该提示?如果是,那么每次是否都是相同的指纹?如果不是,那真的很可怕。不太令人恐惧的选项是它实际上并没有设法写入主机文件,因此每次都会重试。看看~/.ssh/known_hosts吗?
卡斯卡贝尔2012年

1
是。<i>每次</ i>。但是,我看不到“您确定...”消息-也许我已取消了它。
唐纳德·泰勒

房东列出了~/.ssh/known_hosts吗?(是否列出了5000次?)是否~/.ssh/config存在/包含任何内容(尤其是的值StrictHostKeyChecking)?
卡斯卡贝尔2012年

主机一次在该文件中列出,并且是唯一条目。
唐纳德·泰勒

2
我猜您known_hosts文件的内容不好。它应该是主机密钥,排成一行。例如,如果您只有主机名,则该主机名将不起作用。我建议您删除该文件(如果确实只包含该单个主机的信息),并允许SSH在下次连接时创建它。此后应该保持沉默。
三胞胎2012年

Answers:


240

解决方案:创建~/.ssh/config文件并插入以下行:

UserKnownHostsFile ~/.ssh/known_hosts

然后,您下次访问Github时会看到该消息,但是之后,您将再也看不到该消息,因为主机已添加到known_hosts文件中。这可以解决问题,而不仅仅是隐藏日志消息。

这个问题困扰了我一段时间。发生问题是因为为Windows编译的OpenSSH客户端未检查~/.ssh/known_hosts

ssh -vvvvvvvvvvvvvvvvvv git@github.com

debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
debug3: check_host_in_hostfile: filename /dev/null
debug3: check_host_in_hostfile: filename /etc/ssh/ssh_known_hosts
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.

9
是的,我不认为抑制警告或错误不是解决问题的正确方法。;)
Jeremiah Gowdy 2013年

1
最近,我在ubuntu机器上遇到了同样的问题。在使用其他(不同于默认的~/.ssh/id_rsa)键连接到服务器后,它开始以这种方式运行。正如@JeremiahGowdy所说,我有debug3: load_hostkeys: loading entries for host "172.16.3.101" from file "/dev/null"。为什么/dev/null在更改密钥后SSH会开始使用known_hosts?
m-ric

6
很棒!最终,愚蠢的警告停止了。顺便说一句,在Windows上,~in ~/.ssh/config是用户的主文件夹。要轻松打开它,请按Win-R,输入cmd Enter。命令提示符应该已经在您的主文件夹中打开。键入cd .ssh Enter,然后start . 按Enter打开Windows资源管理器中的文件夹。然后,您可以在记事本中创建配置文件(保存时没有.txt扩展名)。(专业版用户可以在命令提示符本身中直接回显到新文件;))。运行涉及远程两次的git命令(如git fetch),您就完成了。
ADTC

1
为什么您的ssh有20 V?
bubakazouba

3
@bubakazouba v越多,日志获取的内容越详细,请查看文档。三个就足够了,二十个就足够了:D
PetrMánek'16

90

将以下行添加到您的ssh配置文件($ HOME / .ssh / config):

LogLevel=quiet

如果从命令行运行ssh,请在命令字符串中添加以下选项:

-o LogLevel=quiet

例如,以下内容打印出安装在machine.example.org上的gcc版本(无警告):

ssh -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -o LogLevel=quiet \
    -i identity_file \
    machine.example.org \
    gcc -dumpversion

1
将“ LogLevel = quiet”添加到“ config”文件中的工作正常。谢谢。
唐纳德·泰勒

3
为了维护安全性,最好将“ LogLevel = quiet”放在“主机”部分中。

39
LogLevel=quiet这是一个坏主意,他希望显示所有错误,而他只是想避免这种特定的令人讨厌的错误。可能是因为他欺骗了ssh /dev/null用作known_hosts文件,可能是因为他想关闭known_hosts指纹检查,但没有,因为ssh霸主不允许他这样做。
Elazar Leibovich 2012年

loglevel=error连接终止时,@ bukzor 仍显示“与<server>的连接已关闭”,这对于脚本编写也确实很烦人。
2014年

我对此表示反对,因为它并不能真正解决问题。它只是将其隐藏。
alaboudi

60

在文件中设置LogLevelERROR(not QUIET),~/.ssh/config以避免出现以下错误:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR

2
就我而言,这效果最好-或您可以在命令行上指定“ -oLogLevel = ERROR”
Brad

5

该消息来自SSH,它警告您正在连接到从未连接过的主机。我不建议您将其关闭,因为这意味着您可能会错过有关主机密钥更改的警告,该警告可能表示对SSH会话的MITM攻击。


1
但我每天连接10至15次,但仍然收到此警告。
唐纳德·泰勒

@杰克 查看~/.ssh/known_hosts并查看您的主机是否在其中。
Borealid '02

密钥是否由于某些原因而改变?检查文件中的指纹与ssh输出的指纹。另外,.ssh目录的模式是否设置为0700?
杰森·卡雷罗

2
@JasonCarreiro,我是个大男孩,我知道没人会在我的机架中拉动MITM攻击,安全性是一个折衷,我希望新计算机能够使用预共享密钥开箱即用,而无需管理CA或ssh-keyscan
Elazar Leibovich 2012年

4

要取消显示警告消息,ssh可以将以下行添加到~/.ssh/config

Host *
LogLevel error

这将禁用警告,但不会禁用错误消息。与其他设置一样,如果您想要更细粒度的控制,则可以基于主机~/.ssh/config配置LogLevel


2

这主要意味着该主机的密钥已更改~/.ssh/known_hosts,并且不会自动更新它。因此,每次您收到此警告消息。

这种情况通常发生在连接到重新创建的虚拟机时,这会更改具有相同IP地址的密钥

如果只有一个条目,则可以删除该~/.ssh/known_hosts文件,并且在首次连接后,该密钥将在那里,此后没有警告消息。

如果您有多个条目,则可以使用下面的命令删除

$ ssh-keygen -R <hostname>

这对我来说可以


0

如果您使用的是来自GitHub的存储库,请考虑改为使用URL 的HTTPS版本,以完全避免此问题:

单击HTTP按钮,然后克隆该URL

如果您从Windows GitHub应用程序中克隆存储库,这就是它用于远程URL的方式。也许他们知道一些我们不知道的东西。


注意:如果使用私钥身份验证,则不能使用HTTP(S)。
qwertzguy 2015年

0

我有同样的问题,但发现我的.ssh文件中没有文件~。所以我只.ssh~路径下创建目录,问题就解决了。



0

添加SSH密钥

ssh-keygen -t rsa -b 4096 -C "abc@abc.com"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/bitbucket_rsa

箱子配置文件

crate ~/.ssh/config

在下面添加行。

UserKnownHostsFile ~/.ssh/known_hosts

然后添加发布密钥并克隆您的存储库...完成.....


0

我在Linux / Cent OS VM中遇到了相同的错误,这是因为IP在重新启动后正在更改。为了解决这个问题,我在网络中定义了一个静态IP,并将该条目添加到/ etc / hosts文件中。对于静态IP,请提及一个稍高的范围值。例如,如果您当前的IP(ipconfig / ifconfig)为192.168.0.102,则下一次重启后可能会变为192.168.0.103。因此,在IPV4设置中将静态IP定义为192.168.0.181即可解决问题。


尝试突出显示关键字并保持格式清晰,这将有助于您找到其他答案
Agilanbu

0

就我而言,这是因为设置服务器的管理员在 ~/.ssh/config

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

在大多数情况下,通过不使用~/.ssh/known_hosts文件,效果很好。但是对于企业gitlab存储库,每次它给出“警告:将...永久添加到已知主机列表中”。

我的解决方案是注释掉该UserKnownHostsFile /dev/null行,从而允许创建~/.ssh/known_hosts。然后,此后它不再发出任何警告。

您的中可能还会有旧/无效的条目known_hosts

# find entry in ~/.ssh/known_hosts
ssh-keygen -F <hostname>

# delete entry in ~/.ssh/known_hosts
ssh-keygen -R <hostname>

-1

由于投票率持续下降,我正在取消解决方案。
这是最好的解决方案,无需实际破解SSH客户端本身的源代码。
如果有人感兴趣,请检查编辑历史记录。

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.