ssh-add抱怨:无法打开与身份验证代理的连接


151

我一直在尝试ssh-add运行Raspbian的RaspberryPi。

我可以启动ssh-agent,然后在终端中输入以下内容:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

如果我运行,ps aux | grep ssh我可以看到它正在运行。

然后,我尝试运行ssh-add以添加我的密钥密码,然后得到以下信息:

Could not open a connection to your authentication agent.

有任何想法吗?


6
试试eval $(ssh-agent)
Ulrich Dangel 2012年

Answers:


224

您的shell用来评估的shell代码输出ssh-agent。运行此命令:

eval "$(ssh-agent)"

或者,如果您已经启动了ssh-agent,请将其复制粘贴到您的shell提示符下(假设您正在运行类似Bourne的shell)。

ssh命令需要知道如何与对话ssh-agent,他们从SSH_AUTH_SOCK环境变量中知道。


谢谢,我不太了解它是如何工作的。非常感谢。
丹尼尔·格罗夫斯

2
或者,您可以输入ssh-agent bash,然后在ssh-add起作用后
RaduM 2013年

@Stephane,我是否正确地知道ssh-agent命令只是在eval版本实际运行命令时打印其执行的输出?
Denys S.

5
@DenysS。好吧,不,它会进行设置,然后告诉您的Shell如何更新其环境以能够与其联系。它本身不能做到这一点。它可以使用更新的环境来启动新的shell(ssh-agent bash确实如此),但是它不能更新运行外部命令(您已经在运行的shell)的单独进程的内存。
斯特凡Chazelas

@StephaneChazelas,如果我的ssh-agent是在引导时启动的,但是我仍然必须在我的shell中进行评估,是否意味着它不会针对每个shell进行自动评估,并且必须由root用户进行某种配置?
Denys S.

27

试试这个:

$ ssh-agent /bin/sh
$ ssh-add $yourkey

5
这实际上对我有用,而其他答案都不起作用。
约瑟夫·斯诺

2
如果您使用的是鱼壳,则此答案有效。ssh-agent /usr/bin/fish
slackmart

1
我收到错误消息:“ 无法打开与您的身份验证代理的连接。
IgorGanapolsky

@slackmart如果您在BSD中安装了fish,则其位置为/usr/local/bin/fish(或/usr/ports/shells/fish)。感谢whereis命令帮助我解决了这个问题。
cjm

太好了,@ cjm,我使用的是Slackware Linux,这是对我有用的方法。
slackmart


6

如果使用csh作为外壳程序(FreeBSD PI),则可以使用:

eval `ssh-agent -c`

接下来,您只需要执行以下操作:

ssh-add ~/.ssh/id_rsa

我收到错误消息:“ 无法打开与您的身份验证代理的连接。
IgorGanapolsky

2

您还可以使用以下语法:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'

这对我不起作用,如果您继续ssh-agent sh -c "ssh-add -l",它将告诉您您没有身份。
艾因·托夫里

因为您必须先添加它,例如:ssh-agent sh -c "ssh-add && ssh-add -l"将打印您的身份。
kenorb

1

试试这个:去C:\$Installation_Folder$\Git\cmd 执行:

start-ssh-agent 

它将打开一个cmd命令并ssh-agent以正确的方式运行。

ssh-add ~/.ssh/id_rsa 然后应该工作。


bash:start-ssh-agent:找不到命令
IgorGanapolsky '16

1

这很令人困惑,并且有2个可能的好的答案,具体取决于用户是尝试在Linux还是Windows(如我)上添加ssh密钥。这可能无法解决OP,但是git-bash的扩展。我同时运行Windows和Ubuntu进行开发,并且git的安装略有不同。

尝试以下操作:转到C:\ $ Installation_Folder $ \ Git \ cmd并执行:

start-ssh-agent它将打开一个cmd命令并以正确的方式运行ssh-agent。

..是一个很好的Windows的答案,但没有指定您预计要经过Windows资源管理器找到Git的安装文件夹,并运行Windows外壳程序将在第1步完成后打开
“去C:\ $ Installation_Folder $ \ Git \ cmd“

步骤2:您只需要双击

start-ssh-agent

在第3步中,返回到git-bash或正在运行的任何* nix终端仿真器,然后运行ssh-add。如果您使用ssh公钥的默认名称,则不必添加该名称,因为ssh-add会自动使用该名称。


1

如果您希望将身份与sudo结合使用,可以通过多种方式进行,例如sudo npm install

很长的路要走,但它也为您提供root访问权,因此您无需使用sudo太多资源。

  1. 运行
    sudo ssh-agent bash
    这将要求您输入密码,然后ssh-agent以超级用户的权限运行,
  2. 导航到用户的.ssh文件夹
    cd /home/user/.ssh
  3. 从那里您可以运行

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

简短的方式,只有您的用户(除非您想多动手)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME

exporteval工作一样好根提供root的登录shell是伯恩等等。如果root的shell是csh或tcsh,用eval `ssh-agent -c`
斯特凡Chazelas

请注意,您还可以通过以下方式授予root对ssh代理的访问权限sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
StéphaneChazelas 2015年

试过,两个bash都再次被破坏,并且都无法正常工作。默认情况下,我的debian jessie实例上的所有用户(包括root)都设置为使用bash。
Belldandu 2015年

你尝试了什么?eval "$(ssh-agent)"在以root身份运行的bash shell提示下将起作用。显然,您需要ssh从该shell或其后代运行,以便它们继承SSH_AUTH_SOCK env var。eval "$(sudo ssh-agent)"; sudo ssh...无法使用,因为sudo默认情况下不会通过SSH_AUTH_SOCK env var。
斯特凡Chazelas

我试着eval "$(ssh-agent)"稍后再看是否有某种配置错误。尽管本指南给出的当前方法允许您自由控制希望成为哪个用户,因为您已经是root用户,并且可以访问服务器上的任何用户id_rsa。因此,一旦我正常工作,请编辑我的答案。
Belldandu 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.