题 无法打开与身份验证代理的连接


我遇到了这个错误:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

我试图添加密钥,我在下面收到此错误:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

1185
2017-07-24 23:26


起源


问题:一旦您在本页面上完成了每个答案,并且它们都不起作用。你接下来可以做什么? - Brandon Bertelsen
@BrandonBertelsen试试这个: $ ssh-agent /bin/sh     和 $ ssh-add $yourkey - shyam


答案:


你有没有开始 ssh-agent

你可能需要开始 ssh-agent 在你运行之前 ssh-add 命令:

eval `ssh-agent -s`
ssh-add

请注意,这将启动代理 msysgit Windows上的Bash。如果您使用的是其他shell或操作系统,则可能需要使用该命令的变体,例如 其他答案

请参阅以下答案:

  1. ssh-add抱怨:无法打开与身份验证代理的连接
  2. Git push需要用户名和密码 (包含有关如何使用ssh-agent的详细说明)
  3. 如何运行(git / ssh)身份验证代理?
  4. 无法打开与身份验证代理的连接

要自动启动ssh-agent并允许单个实例在多个控制台窗口中工作,请参阅 登录时启动ssh-agent

为什么我们需要使用 eval 而不仅仅是 ssh-agent

要找出原因,请参阅 罗宾格林的回答

公钥与私钥

此外,每当我使用 ssh-add,我总是添加私钥。文件 ~/.ssh/id_rsa.pub 看起来像一个公钥,我不确定这是否会奏效。你有没有 ~/.ssh/id_rsa 文件?如果你在文本编辑器中打开它,它是否说它是私钥?


1831
2017-07-25 03:37



@xtian我不确定我是否理解这个问题。我不知道确切的细节,但我猜测私钥永远不会通过网络发送。我认为 ssh-add 只是解密主机上的加密私钥,这样它就可以在本地使用......就是这样 从未发送给任何人。我猜测只有公钥才能通过网络发送。我的理解不正确吗?
你太善良的蛋糕了。你是绝对正确的。我的错。 在这里; ssh-add为用户的ssh-agent(运行进程)添加私钥,可以代表客户端/主机,服务器接受rsa-whatever键。吉兹。我不知道是什么让我如此兴奋。 - xtian
这有效,但为什么呢? - Ali
我很好奇为什么 eval ssh-agent -s 工作,但 ssh-agent 它本身没有。 - DanielM
@DanielM:SSH需要两件事才能使用ssh-agent:一个在后台运行的ssh-agent实例,以及一个环境变量集,它告诉SSH应该使用哪个套接字来连接代理(SSH_AUTH_SOCK IIRC)。如果你只是跑 ssh-agent 然后代理将启动,但SSH将不知道在哪里找到它。 - Matthew Phipps


我尝试了其他解决方案无济于事。我做了更多研究,发现以下命令有效。我正在使用Windows 7和 Git Bash

eval $(ssh-agent)

更多信息: https://coderwall.com/p/rdi_wq


442
2018-02-20 13:34



也适用于Windows 8。 - Andreas Rudolph
也适用于Windows 8.1,谢谢。 :) - Yenthe
它赢得了胜利7,谢谢 - Hoto
Win 7和Git Bash在这里...... Cupcake的回答对我不起作用,但是这个做了。谢谢。 - Ayana
这适用于git bash中的windows 10(“正确”答案没有) - charneykaye


以下命令对我有用。我正在使用CentOS。

exec ssh-agent bash

220
2017-12-05 15:10



谢谢,这对我有用,我为我的shell运行'exec ssh-agent zsh'。 - jasonmcclurg
配置此解决方案适用于我的Ubuntu 12.04 LTS。 - Paul L
根据 这个删除的“答案”,它也适用于Amazon Linux AMI。我想这是一个Unix / Linux / * nix解决方案。
我ssh'ed到一个码头工人容器和 ssh-add my.id_rsa 我会失败的。但 exec ssh-agent zsh 给了我可以的环境 ssh-add 没问题。而且我在我的docker容器里面:) - markuz-gj
在Windows 7上为我工作。 - Qing


MsysGit或Cygwin

如果您正在使用Msysgit或Cygwin,您可以找到一个很好的教程 msysgit中的SSH-Agent和cygwin和bash

  1. 添加一个名为的文件 .bashrc 到你的主文件夹。

  2. 打开文件并粘贴到:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
    
  3. 这假设你的钥匙是传统的 ~/.ssh/id_rsa 位置。如果不是,请在之后包含完整路径 ssh-add 命令。

  4. 添加或创建文件 ~/.ssh/config 与内容

    ForwardAgent yes
    

    在原始教程中 ForwardAgent 帕拉姆是 Yes,但这是一个错字。使用全部小写或者你会得到错误。

  5. 重启Msysgit。它会要求您输入一次密码,就是这样(直到您结束会话,或者您的ssh-agent被杀死。)

Mac / OS X.

如果您不想在每次打开终端时启动新的ssh-agent,请查看 钥匙扣。我现在在Mac上,所以我使用了教程 在Mac OS X上使用zsh和keychain的ssh-agent 设置它,但我确信谷歌搜索将有足够的Windows信息。

更新:在Mac上更好的解决方案是将您的密钥添加到Mac OS Keychain:

ssh-add -K ~/.ssh/id_rsa

就那么简单。


190
2018-04-09 17:43



仅供参考:合并自 stackoverflow.com/questions/4083079/... - Shog9♦
当我做 eval `ssh-agent -s` 当我退出cygwin时,这个过程并没有停止。 - Kiril
有没有办法为Windows / gitbash设置配置,所以你不必每次都这样做? - mix3d
它应该是 ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)  - 否则每次都会启动一个新的ssh-agent。当用户有cronjobs时,不时地杀死我的机器。 - shredding
ForwardAgent yes 没有必要,是一个 非理论安全风险 如果它是为任何不受信任的服务器设置的。无论此设置如何,对密钥代理的本地访问都应起作用。 - SeldomNeedy


无法打开与身份验证代理的连接

要解决此错误:

庆典:

$ eval `ssh-agent -s`

tcsh中:

$ eval `ssh-agent -c`

然后用 ssh-add 像往常一样。


热门提示:

我总是忘记为上面的ssh-agent命令输入什么,所以我在my中创建了一个别名 .bashrc像这样的文件:

alias ssh-agent-cyg='eval `ssh-agent -s`'

现在而不是使用 ssh-agent, 我可以用 ssh-agent-cyg

例如。

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

原始修复源:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


174
2017-07-17 08:54



这是永久性的吗? - CMCDragonkai
你需要运行 eval 每次你以前跑过的命令 ssh-agent。我现在使用别名,请参阅更新的答案,了解我是如何做到这一点的。 - Chris Snow
仅供参考:合并自 stackoverflow.com/questions/4083079/... - Shog9♦
我还需要使用ssh规范而不是https(参见 help.github.com/articles/changing-a-remote-s-url) - RunHolt
你先生,你太棒了。谢谢。 **我在克隆一个bitbucket repo时面临同样的问题,我已经设置了一个ssh密钥,但一直收到错误: fatal: Could not read from remote repository.。 - Nishant Ghodke


我在Linux上遇到了同样的问题,这就是我所做的:

基本上,命令ssh-agent启动代理,但它并没有真正设置环境变量来运行它。它只是将这些变量输出到shell。

你需要:

eval `ssh-agent`

然后执行ssh-add。看到 无法打开与身份验证代理的连接


103
2017-07-19 06:12



仅供参考:合并自 stackoverflow.com/questions/4083079/... - Shog9♦
这个答案应该被接受,解决了我的问题。谢谢 - reformed
没有解决我的问题,问题仍然存在 - Brovoker
在Windows上使用boot2docker时遇到问题也为我工作。 - Veve
这就是我所需要的。 - Tom


ssh-add和ssh(假设您使用的是openssh实现)需要一个环境变量来知道如何与ssh代理进行通信。如果您在不同的命令提示符窗口中将代理程序启动到您现在正在使用的代理程序窗口,或者如果启动错误,则ssh-add和ssh都不会看到该环境变量集(因为环境变量已设置) 本地 在命令提示符下设置)。

你没有说你正在使用哪个版本的ssh,但如果你正在使用cygwin,你可以使用这个 Cygwin上的SSH代理

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

这将为您打开的每个新命令提示符窗口自动启动代理程序(如果您在一个会话中打开多个命令提示符,这是次优的,但至少它应该工作)。


94
2017-11-03 11:53



仅供参考:合并自 stackoverflow.com/questions/4083079/... - Shog9♦
我从另一个SO问题链接到这里。我可以问为什么有必要将它添加到Bash配置文件中?在我的机器上,我需要做的就是运行 eval $(ssh-agent) 我可以为每个新的终端窗口使用无密码的ssh。 - Andy J
除非你从那个终端发射新的终端,否则这是不可能的。 - Robin Green
这对我来说很完美。干杯 - dspacejs


尝试以下步骤:

1)打开Git Bash并运行: cd ~/.ssh 

2)尝试运行代理: eval $(ssh-agent)

3)现在,您可以运行以下命令: ssh-add -l 


88
2017-11-26 13:47



这是对我有用的唯一解决方案(在Windows 7上)。首先我使用了 ps aux | grep ssh 和 kill 在里克回答杀死特工的命令。之后 ssh-add 没有-l开关工作(使用-l给出错误)。 eval 'ssh-agent' 就像里克的回答没有用,我不得不使用 eval $(ssh-agent) 就像Chechoro在这里的回答一样。 - Frug
+1我有与OP(Windows 7)完全相同的问题,这是唯一对我有用的解决方案。 - Weblurk
仅供参考:合并自 stackoverflow.com/questions/4083079/... - Shog9♦
尝试了所有其他,这对我有用! - ceebreenk
@Frug这是反叛,而不是撇号;在shell脚本中,这意味着执行内部包含的内容。 $(ssh-agent) 相当于 `ssh-agent` 但更具可读性。 - M.M