无法将主机添加到已知主机列表中

时间:2013-07-16 04:52:04

标签: github ssh permissions terminal ssh-keys

Mac OSX Lion 10.7。

为了解决奇怪的环境问题(自制软件没有安装wget,我有各种奇怪的块和错误),我卸载了zschrc和homebrew以及其他一些东西,然后安装了fish shell。 / p>

现在,每当我尝试向/从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中的所有内容都是我用于ssh'ing(也带有“真实性......”提示)的pem文件到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情况不满意。

16 个答案:

答案 0 :(得分:100)

在您的具体情况下,您的known_hosts是一个文件夹,因此您需要先删除它。

对于遇到类似问题的其他人,请检查您~/ssh/known_hosts的正确权限,因为它可能由不同的用户(例如root)拥有。所以你可以尝试运行:

sudo chown -v $USER ~/.ssh/known_hosts

修复它。

答案 1 :(得分:25)

对于Ubuntu上的人,如果你收到此错误:

  

无法将主机添加到已知主机列表

然后只需删除known_hosts文件,然后重新运行ssh。这将使用适当的权限重新生成known_host文件,并将您尝试ssh的远程主机添加到此文件中。

答案 2 :(得分:17)

不应该known_hosts是一个平面文件,而不是一个目录?

如果那不是问题,那么Github上的this page可能会有所帮助。尝试使用带有-v或-vv标志的SSH来查看详细的错误消息。它可能会让你更好地了解失败的原因。

答案 3 :(得分:15)

我认为通过删除〜/ .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。

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

来查看此信息

出现此问题是因为s​​sh是一个程序正在尝试写入其文件夹中名为known_hosts的文件。在写入时,如果它知道它没有足够的权限,它将不会写入该文件,因此失败。这是我对这个问题的理解,更多知识渊博的人可以在这方面投入更多的光。 希望它有所帮助

答案 5 :(得分:6)

这个命令对我有用,

sudo chown -v $USER ~/.ssh/known_hosts

如@kenorb所述。

由于当前用户的权限被破坏而导致错误。

答案 6 :(得分:3)

这是我需要的解决方案。

sudo chmod 700 ~/.ssh/
sudo chmod 600 ~/.ssh/*
sudo chown -R ${user} ~/.ssh/
sudo chgrp -R ${user} ~/.ssh/

答案 7 :(得分:2)

只是因为权限被破坏才发生在我身上。我的用户没有对该文件的读取或写入权限。修复权限解决了问题

答案 8 :(得分:1)

我再次生成了“ssh”密钥并添加到我的git帐户中。这对我有用。

请查找以下命令以生成“ssh-key”:

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

- &GT;这会使用提供的电子邮件作为标签创建一个新的ssh密钥。

Generating public/private rsa key pair.

- &GT;当系统提示您“输入要保存密钥的文件”时,按Enter键。这接受默认文件位置。

Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]

- &GT;在提示符下,键入安全密码。有关详细信息,请参阅"Working with SSH key passphrases"

Enter passphrase (empty for no passphrase): [Type a passphrase]

Enter same passphrase again: [Type passphrase again]

- &GT;生成密钥以复制密钥:

$ sudo cat /root/.ssh/id_rsa-pub

希望这有效!

答案 9 :(得分:0)

此命令对我有用,

sudo chmod +x ~/.ssh/known_hosts 

答案 10 :(得分:0)

对我来说,我就是这样做的:

rm -rf ~/.ssh/known_hosts

然后:

我只是SSH到目标主机,一切都会好起来的。 仅当您不知道什么权限以及“ known_hosts”文件的默认所有者时才如此。

答案 11 :(得分:0)

检查文件的权限,如果很好,请检查父目录

我必须纠正

/home/sravindr/.ssh权限对我有用

答案 12 :(得分:0)

我遇到了这个问题,发现在~/.ssh/config中有一行显示为:

UserKnownHostsFile=/home/.ssh-agent/known_hosts

我刚刚将这一行修改为:

UserKnownHostsFile=~/.ssh/known_hosts

那为我解决了这个问题。

答案 13 :(得分:0)

这可能是由于known_hosts文件由另一个用户拥有,即在大多数情况下是root。 您可以访问给定的路径目录(在本例中为/home/taimoor/.ssh/known_hosts),并检查根是否为所有者,并将其更改为默认所有者。

示例:

错误说明- Error Description

更改所有者之前- Before changing the owner

更改所有者后- enter image description here

答案 14 :(得分:0)

当我尝试以下命令时,它可以与我一起工作

sudo chown $my_user .ssh/id_rsa
sudo chown $my_user .ssh/id_rsa.pub
sudo chown $my_user .ssh/known_hosts

答案 15 :(得分:-1)

  

对于任何感兴趣的人,这个人在Ubuntu中为我工作:

  1. 转到 .ssh 目录。

    $ cd ~/.ssh
    
  2. 删除 known_hosts 文件。

    $ rm known_hosts
    
  3. 重新推送您的Git更改。