我刚刚安装了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密钥创建的密码。怎么回事?!这真是令人困惑。
答案 0 :(得分:1)
您正在运行的用户似乎没有权限写入默认的ssh-agent套接字位置。
这可以解决您的问题:
ssh-agent -a ~/.ssh-agent.$$
这指定了-a
选项的套接字位置,即~/.ssh-agent.$$
,即在您的主目录中。
权限问题可能是由简单的UNIX权限(即/tmp
无法由该用户编写),SELinux或其他内容引起的。
答案 1 :(得分:0)
经过几个小时的努力,我终于找到了问题的根源。
umask 755
放入.bashrc
;我的意图是我的文件权限是755,在这种情况下,umask
应该设置为022
或002
(我选择了后者)。这个不正确的umask
被证明是我所有权限错误的根(hehe):所有不同的SSH命令生成的文件和目录都是使用不正确的权限创建的。ssh-add
我的公钥,而不是我的私钥;我无法弄清楚为什么它一直说我的密码错误,尽管我100%确定它是正确的。原因是因为密码是针对私人键的;公钥没有密码保护,因此尝试ssh-add
并为其输入密码导致所有这些" Bad passphrase"错误。谢谢大家的帮助!你让我走上寻找适合我的解决方案的道路。在纠正了这些错误之后,我成功地启动了ssh-agent
而没有root权限,并添加了我的私有 SSH密钥。