将主机添加到已知主机列表失败
Posted
技术标签:
【中文标题】将主机添加到已知主机列表失败【英文标题】:Failed to add the host to the list of know hosts 【发布时间】:2013-07-14 03:30:51 【问题描述】:Mac OSX Lion 10.7。
为了解决奇怪的环境问题(homebrew 没有安装 wget,而且我遇到了各种奇怪的块和错误),我卸载了 zschrc 和 homebrew 以及其他一些东西,然后安装了 fish shell。
现在,每当我尝试向/从 github 推送/拉取时,都会收到此错误:
The authenticity of host 'github.com (204.232.175.90)' can't be established.
RSA key fingerprint is <string of colon-separated chars that I should probs keep private>.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/Users/sasha/.ssh/known_hosts).
所以我尝试检查我的 ~./ssh 文件夹的权限,并得到了这个,这对我来说很好:
-rw-r--r-- 1 sasha staff 97B Jul 9 22:56 config
-rw------- 1 sasha staff 1.7K May 16 2012 id_rsa
-rw-r--r-- 1 sasha staff 403B May 16 2012 id_rsa.pub
drwx------ 5 sasha staff 170B Jul 15 09:56 known_hosts
known_hosts 中的所有内容都是一个 pem 文件,我用于 ssh(也带有“真实性...”提示)到 Amazon ec2 实例,尽管当事情变得绝望时,我尝试将 id_rsa 和 id_rsa.pub 复制到那里。
知道发生了什么吗?我很想解决这个问题,这样我推/拉的时候就不会收到提示。
编辑我不久前成功关注了these instructions,所以我在 Github 上确实有我的 ssh 密钥,并且它们被识别了,所以当我运行 ssh -T git@ github.com,我明白了
Hi sashafklein! You've successfully authenticated, but GitHub does not provide shell access.
似乎只有我的 本地 计算机对我的 ssh 情况不满意。
【问题讨论】:
【参考方案1】:known_hosts 不应该是一个平面文件,而不是一个目录吗?
如果这不是问题,那么 Github 上的 this page 可能会有所帮助。尝试使用带有 -v 或 -vv 标志的 SSH 来查看详细的错误消息。它可能会让您更好地了解失败的原因。
【讨论】:
很奇怪。我想我一定是把它变成了一个目录,虽然我不记得什么时候了。移动/重命名它修复了一切。谢谢! 在WSL 上遇到了同样的问题,删除文件后它又恢复了正常。运行命令创建了一个新的。谢谢。【参考方案2】:在您的具体情况下,您的 known_hosts
是一个文件夹,因此您需要先将其删除。
对于遇到类似问题的其他人,请检查您的~/ssh/known_hosts
的正确权限,因为它可能由不同的用户(例如root)拥有。所以你可以尝试运行:
sudo chown -v $USER ~/.ssh/known_hosts
修复它。
【讨论】:
还是报错:Failed to add the host to the list of known hosts (/Users/igorganapolsky/.ssh/known_hosts).
是否应该同时更改组到 $USER 或离开 -rw-r--r-- 1 $USER root
?
@Suncatcher 离开根组更安全。通常根组中的用户无论如何都具有 sudo 访问权限。其次,known_hosts
文件中的数据并不那么机密。
别忘了他的主目录和.ssh目录也必须有正确的权限(读、写、执行仅限用户)
另外,请确保您在本地计算机上执行此操作,而不是在您连接的远程计算机上。【参考方案3】:
对于使用 Ubuntu 的人,如果您收到此错误:
将主机添加到已知主机列表失败
然后只需删除 known_hosts
文件,然后重新运行您的 ssh。这将重新生成具有适当权限的 known_host
文件,并将您尝试 ssh 的远程主机添加到该文件中。
【讨论】:
如何重新运行我的 ssh?【参考方案4】:我认为通过删除 ~/.ssh/known_hosts (这是一个文件夹,而不是文件)解决了 OP 的问题。但对于可能遇到此问题的其他人,我注意到我的一台服务器具有奇怪的权限 (400):
-r--------. 1 user user 396 Jan 7 11:12 /home/user/.ssh/known_hosts
所以我通过添加所有者/用户 PLUS 写入解决了这个问题。
chmod u+w ~/.ssh/known_hosts
因此。 ~/.ssh/known_hosts 需要是一个平面文件,并且必须归您所有,并且您需要能够对其进行读写。
您总是可以宣布 known_hosts 破产,删除它,然后继续正常工作,连接到事物 (git / ssh) 将重新生成一个新的 known_hosts,它应该可以正常工作。
【讨论】:
在我的系统中(还原后)该文件归根用户所有...chown user.user ~/.ssh/known_hosts
修复了这个问题。
有趣。我是如何面对同样愚蠢的问题的。 chmod u+w
解决了这个问题。一定是一些错误的安全脚本……【参考方案5】:
这发生在我身上只是因为权限被破坏。我的用户没有对该文件的读写访问权限。修复权限解决了问题
【讨论】:
【参考方案6】:好的,理想的权限如下所示
对于 ssh 目录(您可以通过输入 ls -ld ~/.ssh/
来获取)drwx------ 2 oroborus oroborus 4096 Nov 28 12:05 /home/oroborus/.ssh/
d 表示目录,rwx 表示用户 oroborus 具有读写和执行权限。这里 oroborus 是我的计算机名,你可以通过回显 $USER 找到你的。第二个oroborus实际上是该组。您可以阅读更多关于每个字段的含义here。学习这一点非常重要,因为如果您正在使用 ubuntu/osx 或任何 Linux 发行版,您可能会再次遇到它。
现在要使您的权限看起来像这样,您需要输入sudo chmod 700 ~/.ssh
二进制的7是111,读1写1,执行1,可以用类似的逻辑解码6,只有读写权限
您已授予用户读写和执行权限。确保您的文件权限如下所示。
total 20
-rw------- 1 oroborus oroborus 418 Nov 8 2014 authorized_keys
-rw------- 1 oroborus oroborus 34 Oct 19 14:25 config
-rw------- 1 oroborus oroborus 1679 Nov 15 2015 id_rsa
-rw------- 1 oroborus oroborus 418 Nov 15 2015 id_rsa.pub
-rw-r--r-- 1 oroborus root 222 Nov 28 12:12 known_hosts
您已在此处向您的用户授予对所有文件的读写权限。
你可以通过输入ls -l ~/.ssh/
看到这个
出现此问题是因为 ssh 是一个程序试图写入其文件夹中名为 known_hosts 的文件。在写入时,如果它知道它没有足够的权限,它将不会写入该文件并因此失败。这是我对这个问题的理解,更多有见识的人可以对此有所了解。 希望对你有帮助
【讨论】:
【参考方案7】:我再次生成“ssh”密钥并添加到我的 git 帐户中。这对我有用。
请找到以下命令来生成“ssh-key”:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-> 这将创建一个新的 ssh 密钥,使用提供的电子邮件作为标签。
Generating public/private rsa key pair.
-> 当系统提示您“输入保存密钥的文件”时,按 Enter。这接受默认文件位置。
Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]
-> 在提示符下,输入安全密码。欲了解更多信息,请参阅"Working with SSH key passphrases"
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
-> 生成你的密钥,复制密钥:
$ sudo cat /root/.ssh/id_rsa-pub
希望这行得通!
【讨论】:
【参考方案8】:这个命令对我有用,
sudo chown -v $USER ~/.ssh/known_hosts
正如@kenorb 所提到的。
错误是由于当前用户的权限损坏而出现的。
【讨论】:
【参考方案9】:这个命令对我有用,
sudo chmod +x ~/.ssh/known_hosts
【讨论】:
【参考方案10】:对我来说,我只是这样做:
rm -rf ~/.ssh/known_hosts
然后:
我只是 ssh 到目标主机,一切都会好起来的。 仅当您不知道“known_hosts”文件的权限和默认所有者时才这样做。
【讨论】:
【参考方案11】:对于任何感兴趣的人,这个在 Ubuntu 中对我有用:
转到 .ssh 目录。
$ cd ~/.ssh
删除 known_hosts 文件。
$ rm known_hosts
重新推送您的 Git 更改。
【讨论】:
【参考方案12】:这是我需要的解决方案。
sudo chmod 700 ~/.ssh/
sudo chmod 600 ~/.ssh/*
sudo chown -R $USER ~/.ssh/
sudo chgrp -R $USER ~/.ssh/
【讨论】:
真的需要换组吗? @DmitriZaitsev 尝试不使用,看看是否有效,否则需要。 我只尝试了 2 个第一个命令,它成功了,谢谢。【参考方案13】:检查文件的权限,如果是好的检查父目录
我不得不改正
/home/sravindr/.ssh 权限对我有用
【讨论】:
【参考方案14】:我遇到了这个问题,发现在~/.ssh/config
中有一行内容如下:
UserKnownHostsFile=/home/.ssh-agent/known_hosts
我刚刚将这一行修改为:
UserKnownHostsFile=~/.ssh/known_hosts
这解决了我的问题。
【讨论】:
【参考方案15】:这可能是由于 known_hosts 文件由另一个用户拥有,即在大多数情况下是 root。 您可以访问给定的路径目录(在我的例子中是/home/taimoor/.ssh/known_hosts)并检查root是否是所有者并将其更改为默认所有者。
例子:
错误描述 -
在更改所有者之前 -
更改所有者后 -
【讨论】:
【参考方案16】:当我尝试以下命令时它对我有用
sudo chown $my_user .ssh/id_rsa
sudo chown $my_user .ssh/id_rsa.pub
sudo chown $my_user .ssh/known_hosts
【讨论】:
【参考方案17】:以防万一其他人遇到此错误消息并且 .ssh 和 .ssh/known_hosts 的权限看起来不错。
我的问题是我从 snap 中安装了 gh,并且 snap 应用程序对文件系统的访问受到限制,并且显然无法访问 .ssh。解决办法是去掉 snap 安装,从 apt 安装。
【讨论】:
以上是关于将主机添加到已知主机列表失败的主要内容,如果未能解决你的问题,请参考以下文章
无法将 IP 地址“xxx”的 RSA 主机密钥添加到已知主机列表 (/home/webapp/.ssh/known_hosts)
将 gitlab ssh 公钥添加到公司防火墙后面 dockerfile 中的已知主机(无端口 22)
php_network_getaddresses:getaddrinfo失败:没有这样的主机是已知的,为啥会显示[关闭]
Cloudera安装未能检测到CentOS上的root特权我试图将新主机添加到CentOS集群中。安装失败,状态为“安装失败。无法检测root特权”。我知道Cloudera需要用户具有无密码特权(“需