71

Mac OSX 狮子 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 中的所有内容都是我用于 ssh 的 pem 文件(也带有“真实性...”提示)到 Amazon ec2 实例,尽管当事情变得绝望时我尝试将 id_rsa 和 id_rsa.pub 复制到那里。

知道发生了什么吗?我很想解决这个问题,所以我不会在推/拉的时候得到提示。

编辑我不久前成功地遵循了这些说明,所以我在 Github 上确实有我的 ssh 密钥,并且它们被识别,所以当我运行ssh -T git@github.com时,我得到了

Hi sashafklein! You've successfully authenticated, but GitHub does not provide shell access.

似乎只有我的本地计算机对我的 ssh 情况不满意。

4

17 回答 17

147

在您的特定情况下,您known_hosts是一个文件夹,因此您需要先将其删除。

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

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

要解决这个问题。

于 2014-04-29T10:30:45.047 回答
47

这是我需要的解决方案。

sudo chmod 700 ~/.ssh/
sudo chmod 600 ~/.ssh/*
sudo chown -R ${USER} ~/.ssh/
sudo chgrp -R ${USER} ~/.ssh/
于 2019-04-23T15:36:25.433 回答
30

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

将主机添加到已知主机列表失败

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

于 2014-07-09T03:28:38.760 回答
24

我认为通过删除 ~/.ssh/known_hosts (这是一个文件夹,而不是文件)解决了 OP 的问题。但是对于其他可能遇到此问题的人,我注意到我的一台服务器具有奇怪的权限(400):

-r--------. 1 user user 396 Jan 7 11:12 /home/user/.ssh/known_hosts

所以我通过添加所有者/用户加写来解决这个问题。

chmod u+w ~/.ssh/known_hosts

因此。~/.ssh/known_hosts 需要是一个平面文件,并且必须归您所有,并且您需要能够对其进行读写。

您总是可以宣布 known_hosts 破产,将其删除,然后继续正常工作,并且连接到事物(git / ssh)将重新生成一个应该可以正常工作的新 known_hosts。

于 2015-01-07T16:20:46.603 回答
21

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

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

于 2013-07-16T05:00:08.460 回答
10

这个命令对我有用,

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

正如@kenorb 所提到的。

错误是由于当前用户的权限损坏而出现的。

于 2017-09-19T08:02:10.433 回答
7

好的,理想的权限看起来像这样
对于 ssh 目录(您可以通过键入来获取 ls -ld ~/.ssh/
drwx------ 2 oroborus oroborus 4096 Nov 28 12:05 /home/oroborus/.ssh/

d 表示目录,rwx 表示用户 oroborus 具有读写和执行权限。这里 oroborus 是我的计算机名,你可以通过回显 $USER 找到你的。第二个oroborus实际上是组。您可以在此处详细了解每个字段的含义。学习这一点非常重要,因为如果您正在使用 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 的文件。在写入时,如果它知道它没有足够的权限,它将不会写入该文件并因此失败。这是我对这个问题的理解,更多知识渊博的人可以对此有所了解。希望能帮助到你

于 2016-11-28T06:57:38.007 回答
2

对我来说,我只是这样做:

rm -rf ~/.ssh/known_hosts

然后 :

我只是 ssh 到目标主机,一切都会好起来的。仅当您不知道“known_hosts”文件的权限和默认所有者时才这样做。

于 2019-01-27T09:23:54.593 回答
2

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

于 2016-02-08T20:18:42.470 回答
2

我再次生成“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]

-> 在提示符下,输入安全密码。有关更多信息,请参阅“使用 SSH 密钥密码”

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

Enter same passphrase again: [Type passphrase again]

-> 生成您的密钥,复制密钥:

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

希望这有效!

于 2017-07-25T07:52:35.417 回答
1

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

例子:

错误描述 - 错误描述

在更改所有者之前 - 更改所有者之前

换主人后—— 在此处输入图像描述

于 2020-09-08T10:45:02.503 回答
1

我遇到了这个问题,发现里面~/.ssh/config有一行内容:

UserKnownHostsFile=/home/.ssh-agent/known_hosts

我刚刚将这一行修改为:

UserKnownHostsFile=~/.ssh/known_hosts

这解决了我的问题。

于 2020-02-24T18:24:01.927 回答
0

这个命令对我有用,

sudo chmod +x ~/.ssh/known_hosts 
于 2019-01-05T12:58:27.543 回答
0

当我尝试以下命令时它对我有用

sudo chown $my_user .ssh/id_rsa
sudo chown $my_user .ssh/id_rsa.pub
sudo chown $my_user .ssh/known_hosts
于 2020-09-11T13:55:48.687 回答
0

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

我不得不纠正

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

于 2019-05-29T10:38:47.263 回答
0

以防万一其他人遇到此错误消息并且 .ssh 和 .ssh/known_hosts 的权限看起来不错。

我的问题是我从 snap 中安装了 gh,并且 snap 应用程序对文件系统的访问受到限制,并且显然无法访问 .ssh。解决方案是删除 snap 安装并从 apt 安装。

于 2022-01-07T11:50:23.667 回答
-1

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

  1. 转到.ssh目录。

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

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

于 2019-02-27T01:33:43.537 回答