5

我刚刚安装了 Archbang,并试图克隆我的一个 Git 项目,这需要 SSH 密钥。

过去,我在 Ubuntu 和 RedHat 机器上遵循了 Github 成功指南,但由于某种原因,它在我的新 Arch 安装中并不适合我。

我已经使用以下命令成功生成了我的 SSH 公钥/私钥对:

ssh-keygen -t rsa -b 4096 -C "email@address"

但是当我继续启动 SSH 代理并添加我的公钥时,我遇到了问题。

[user@arch ~]$ eval "$(ssh-agent -s)"
bind: Permission denied
unix_listener: cannot bind to path: /tmp/ssh-ZqYqSabxjZeA/agent.9328

但是,如果我以 root 身份运行它,这是成功的:

[user@arch ~]$ eval "$(sudo ssh-agent -s)"
[sudo] password for user: 
Agent pid 9146

但我很确定我不想以 root 身份进行 SSH 操作。

继续前进,当我尝试使用时ssh-add,我也收到权限错误,但这次是标准用户和 root 用户:

[user@arch ~]$ ssh-add .ssh/id_rsa.pub
Could not open a connection to your authentication agent.
[user@arch ~]$ sudo ssh-add .ssh/id_rsa.pub
Could not open a connection to your authentication agent.

所以现在我真的很困惑。

我尝试以 root 身份打开一个 bash 进程来执行此操作,但是 1)我不喜欢这个想法,并且 2)它仍然无法正常工作,但这次是出于不同的原因:

[user@arch ~]$ sudo ssh-agent -s
[root@arch ~]# ssh-add .ssh/id_rsa.pub
Enter passphrase for .ssh/id_rsa.pub:
Bad passphrase, try again for .ssh/id_rsa.pub:

出于某种原因,在 root shell 中执行此操作会导致我的 SSH 密钥密码被拒绝;我已经用最简单的密码尝试了多次,所以我很肯定我给了它正确的密码。

我不知所措。我真的不喜欢所有这些sudo东西,我不知道为什么它似乎是必要的;我已经检查了 .ssh 目录及其文件的权限,甚至删除了整个目录并重新生成密钥以确保它们没有使用错误的权限生成。

有人可以帮我吗?我究竟做错了什么?

编辑:为了响应建议的答案,我再次尝试使用我的主目录中的套接字位置。这些是结果:

[user@arch ~]$ mkdir -m 700 ~/.ssh
[user@arch ~]$ ssh-keygen -t rsa -b 4096 -C "email@address"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
...
[user@arch ~]$ chmod 644 .ssh/id_rsa.pub && chmod 600 .ssh/id_rsa
[user@arch ~]$ eval "$(ssh-agent -sa .ssh-agent.$$)"
Agent pid 1881
[user@arch ~]$ ssh-add .ssh/id_rsa.pub
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '.ssh/id_rsa.pub' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

在这一点上,我很困惑为什么这些权限是不可接受的,以及为什么它认为我的公钥是私钥。但我很幽默,将权限更改为 600 并尝试再次添加。

[user@arch ~]$ chmod 600 .ssh/id_rsa.pub
[user@arch ~]$ ssh-add .ssh/id_rsa.pub
Enter passphrase for .ssh/id_rsa.pub:
Bad passphrase, try again for .ssh/id_rsa.pub:

现在我已经到了和以前类似的地方:它不喜欢我为我的 SSH 密钥创建的密码。这是怎么回事?!这真是令人费解。

4

2 回答 2

2

您运行的用户似乎没有写入默认 ssh-agent 套接字位置的权限。

这应该可以解决您的问题:

ssh-agent -a ~/.ssh-agent.$$

这使用-a选项指定套接字位置,如~/.ssh-agent.$$,即在您的主目录中。

权限问题可能是由简单的 UNIX 权限(即,/tmp该用户不可写入)、SELinux 或其他原因引起的。

于 2014-11-28T08:10:38.660 回答
1

经过数小时的努力,我终于找到了问题的根源。

  1. 我的 umask 设置完全错误:安装后设置环境时,我不小心放入umask 755.bashrc; 我的意图是让我的文件权限为 755,在这种情况下umask应该设置为022or 002(我选择了后者)。这个错误umask原来是我所有权限错误的根源(呵呵):所有不同的 SSH 命令生成的文件和目录都是使用不正确的权限创建的。
  2. 我试图使用ssh-add我的公钥,而不是我的私钥;我不明白为什么它一直说我的密码错误,尽管我 100% 确定它是正确的。原因是密码是私钥的;公钥没有密码保护,因此尝试使用ssh-add它并为其输入密码会导致所有这些“密码错误”错误。

谢谢大家的帮助!你让我找到了对我有用的解决方案。更正这些错误后,我成功地能够在ssh-agent没有 root 访问权限的情况下启动并添加我的私人SSH 密钥。

于 2014-11-28T21:19:26.863 回答