我一直在尝试让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.


有什么想法吗?

评论

尝试评估$(ssh-agent)

#1 楼

您的外壳程序将评估ssh-agent输出的外壳程序代码。改为运行此命令:

eval "$(ssh-agent)"


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

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

评论


谢谢,我不太了解它是如何工作的。非常感谢。

–丹尼尔·格罗夫(Daniel Groves)
2012-09-22 17:30

或者,您可以输入ssh-agent bash,然后在ssh-add工作之后

– RaduM
13年5月15日13:56

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

– Denys S.
13年10月7日在8:50

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

–StéphaneChazelas
13年10月7日在9:03

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

– Denys S.
13年10月7日在9:10

#2 楼

试试这个:

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


评论


这实际上对我有用,而其他答案都不起作用。

–约瑟夫·斯诺(Joseph Snow)
2014年11月12日18:06

如果您使用的是鱼壳,则此答案有效。 ssh代理/ usr / bin / fish。

– slackmart
16 Mar 29 '16 at 18:17

我收到一个错误:“无法打开与身份验证代理的连接。”

– IgorGanapolsky
16年8月12日在17:29

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

– cjm
16年8月26日在4:28

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

– slackmart
16年8月27日在11:35

#3 楼

这个问题在Stackoverflow上也已经很好地涵盖了。

eval `ssh-agent -s`

ssh-add


评论


您忘记了“ ...”周围的引号。没有它们,在输出上将调用split + glob运算符。

–StéphaneChazelas
2015年12月9日在9:56

#4 楼

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

eval `ssh-agent -c`


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

ssh-add ~/.ssh/id_rsa


评论


我收到一个错误:“无法打开与身份验证代理的连接。”

– IgorGanapolsky
16年8月12日在18:41

#5 楼

您还可以使用以下语法:

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


评论


这对我不起作用,如果您使用ssh-agent sh -c“ ssh-add -l”,它将告诉您您没有身份。

–艾因·托夫里(Ain Tohvri)
15年7月1日在13:43

因为您必须首先添加它,例如:ssh-agent sh -c“ ssh-add && ssh-add -l”将显示您的身份。

– Kenorb
15年7月3日在17:25

#6 楼

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

start-ssh-agent 


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

ssh-add ~/.ssh/id_rsa应该可以工作。

评论


“ bash:start-ssh-agent:找不到命令”

– IgorGanapolsky
16年8月12日在18:42

#7 楼

这很令人困惑,并且有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 Shell,该Windows Shell将在步骤1完成时打开。
“转到C:\ $ Installation_Folder $ \ Git \ cmd“

步骤2:您只需双击

start-ssh-agent


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

#8 楼

如果您希望将身份与sudo一起使用,可以通过以下几种方法进行,例如
sudo npm install

很长一段时间,而且还提供了root用户访问权限,因此您无需大量使用sudo


运行sudo ssh-agent bash
此会要求您输入密码,然后以超级用户的权限运行ssh-agent
导航到用户的.ssh文件夹cd /home/user/.ssh


从那里可以运行

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



简短的方法,只有您的用户(除非您想大量地进行sudo)

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


评论


导出和评估工作与root一样好,只要root的登录外壳是Bourne即可。如果root的shell是csh或tcsh,请使用eval`ssh-agent -c`

–StéphaneChazelas
2015年12月8日22:50

请注意,您还可以通过执行sudo SSH_AUTH_SOCK =“ $ SSH_AUTH_SOCK” npm install来授予对ssh-agent的root访问权限。

–StéphaneChazelas
2015年12月8日在22:51

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

–贝尔丹杜
2015年12月8日在23:51



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

–StéphaneChazelas
2015年12月9日,9:50

我试过评估“ $(ssh-agent)”,稍后再看是否存在某种配置错误。尽管本指南给出的当前方法允许您自由控制希望成为哪个用户,因为您已经是root用户,并且可以访问服务器上的任何用户id_rsa。因此,一旦我正常工作,请编辑我的答案。

–贝尔丹杜
2015年12月9日在19:51