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

时间:2012-02-15 19:09:11

标签: git shell command-line ssh terminal

每次我使用git与遥控器进行交互时,例如拉或推时,我都会看到以下消息:

  

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

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

15 个答案:

答案 0 :(得分:221)

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

UserKnownHostsFile ~/.ssh/known_hosts

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

这个问题困扰了我很长一段时间。出现此问题的原因是为Windows编译的OpenSSH客户端不检查~/.ssh/known_hosts中的known_hosts文件

ssh -vvvvvvvvvvvvvvvvvvv 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.

答案 1 :(得分:85)

将以下行添加到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

答案 2 :(得分:54)

LogLevel文件中将ERROR设置为QUIET(不是~/.ssh/config)以避免出现以下错误:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
   LogLevel ERROR

答案 3 :(得分:4)

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

答案 4 :(得分:3)

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

Host *
LogLevel error

这将禁用警告但不会显示错误消息。与~/.ssh/config中的其他设置一样,如果您想要更精细的控制,则可以在每个主机的基础上配置LogLevel

答案 5 :(得分:2)

它主要表示该主机~/.ssh/known_hosts的密钥发生了更改,并且不会自动更新它。因此,每次收到此警告消息时。

这通常用于连接到重新创建的虚拟机,这会使用相同的IP地址更改密钥

<强>解决方案

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

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

$ ssh-keygen -R <hostname>

它适用于我

答案 6 :(得分:0)

如果您使用的是GitHub中的存储库,请考虑使用该网址的 HTTPS 版本,以完全回避此问题:

Click the HTTP button and clone that URL instead

如果从Windows GitHub应用程序中克隆存储库,则它将用于远程URL。也许他们知道我们不知道的事情。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

当我开始使用Windows机器时,我遇到了同样的问题。在我的情况下,这是因为我的SSH设置没有完成。 Github有一个关于SSH设置的非常精确的文档。一旦这样做了,问题就解决了。

https://help.github.com/articles/checking-for-existing-ssh-keys/ https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

答案 9 :(得分: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

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

答案 10 :(得分: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即可解决问题。

答案 11 :(得分: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>

答案 12 :(得分:0)

使用以下命令将私钥添加到ssh-agent中:

ssh-add ~/.ssh/id_rsa

答案 13 :(得分:0)

我的情况是,在使用Gridengine qrsh远程Shell登录时,我仅收到ssh警告。正常的ssh可以按预期工作(第一次警告,然后安静)。

我的解决方案是用Gridengine可以选择的所有可能的服务器名称手动填充~/.ssh/known_hosts(使用qhost列出服务器):

for p in server1 server2 server3 server4; do
  ssh-keyscan -H ${p}.company.com;
  ssh-keyscan -H $(getent hosts $p | perl -lane 'print $F[0]');
done >> ~/.ssh/known_hosts

背景:

Gridengine是一个作业调度程序,可以使用ssh选择负载最小的服务器。警告的原因是qrsh似乎总是指定用于进行ssh连接的非标准端口,从而导致known_hosts被更新为还包含端口号的条目。下次qrsh选择同一服务器时,将有一个新的端口号,并且known_hosts将使用新的特定于端口的条目进行更新。还添加原始主机IP地址的原因是某些主机使用了ecdsa-sha2-nistp521。如果未添加原始IP条目,则会收到警告:

ECDSA host key for IP address '10.1.2.3' not in list of known hosts.

答案 14 :(得分:-1)

由于持续的投票,我正在解决我的问题 这是最好的解决方案,但实际上并没有破解SSH客户端本身的源代码 如果有人有兴趣,请查看编辑历史记录。