为什么ssh-agent需要root访问权限?

时间:2014-11-28 06:40:00

标签: git bash ssh archlinux ssh-agent

我刚刚安装了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密钥创建的密码。怎么回事?!这真是令人困惑。

2 个答案:

答案 0 :(得分:1)

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

这可以解决您的问题:

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

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

权限问题可能是由简单的UNIX权限(即/tmp无法由该用户编写),SELinux或其他内容引起的。

答案 1 :(得分:0)

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

  1. 我的umask设置完全错误:当我在安装后设置环境时,我不小心将umask 755放入.bashrc;我的意图是我的文件权限是755,在这种情况下,umask应该设置为022002(我选择了后者)。这个不正确的umask被证明是我所有权限错误的根(hehe):所有不同的SSH命令生成的文件和目录都是使用不正确的权限创建的。
  2. 我试图ssh-add我的公钥,而不是我的私钥;我无法弄清楚为什么它一直说我的密码错误,尽管我100%确定它是正确的。原因是因为密码是针对私人键的;公钥没有密码保护,因此尝试ssh-add并为其输入密码导致所有这些" Bad passphrase"错误。
  3. 谢谢大家的帮助!你让我走上寻找适合我的解决方案的道路。在纠正了这些错误之后,我成功地启动了ssh-agent而没有root权限,并添加了我的私有 SSH密钥。