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

我遇到了这个错误:

$ 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. 

你启动了ssh-agent吗?

在运行ssh-add命令之前,您可能需要启动ssh-agent

 eval `ssh-agent -s` ssh-add 

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

看到下面的答案:

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

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

为什么我们需要使用eval来代替ssh-agent

为了找出原因,请参阅罗宾格林的答案 。

公共vs私钥

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

我尝试了其他解决scheme无济于事。 我做了更多的研究,发现下面的命令起作用了。 我正在使用Windows 7和Git Bash 。

 eval $(ssh-agent) 

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

下面的命令为我工作。 我正在使用CentOS。

 exec ssh-agent bash 

MsysGit或Cygwin

如果你使用Msysgit或者Cygwin,你可以在msysgit和cygwin和bash的SSH-Agent上find一个很好的教程:

  1. 将名为.bashrc的文件添加到您的主文件夹。

  2. 打开文件并粘贴:

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

  4. 添加或创build文件~/.ssh/config的内容

     ForwardAgent yes 

    在原始教程中, ForwardAgent参数是Yes ,但是是一个错字。 全部使用小写,否则会出错。

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

Mac / OS X

如果您不想在每次打开terminal时启动新的ssh-agent,请查看Keychain 。 我现在在Mac上了,所以我在Mac OS X上使用了带有zsh&keychain的教程ssh-agent来设置它,但是我确定Googlesearch将有足够的Windows信息。

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

 ssh-add -K ~/.ssh/id_rsa 

就那么简单。

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

要解决此错误:

庆典:

 $ eval `ssh-agent -s` 

tcsh中:

 $ eval `ssh-agent -c` 

然后ssh-add使用ssh-add


热门提示:

我总是忘记input上面的ssh-agent命令,所以我在.bashrc文件中创build了一个别名,如下所示:

 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

我遇到了与Linux相同的问题,这就是我所做的:

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

你需要:

 eval `ssh-agent` 

然后做ssh-add。 请参阅无法打开与身份validation代理的连接

ssh-add和ssh(假设你正在使用openssh实现)需要一个环境variables来知道如何与ssh代理交谈。 如果您在不同的命令提示符窗口中启动代理程序到您正在使用的代理程序,或者如果启动不正确,那么ssh-add和ssh都不会看到该环境variables集(因为环境variables在本地设置为命令提示它被设置在)。

你不会说你正在使用哪一个版本的ssh,但是如果你使用的是cygwin的,你可以在Cygwin的SSH Agent上使用这个配方:

 # 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 

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

尝试以下步骤:

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

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

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

在Windows 10中,我尝试了这里列出的所有答案,但没有一个似乎工作。 事实上,他们提供了一个线索。 要解决问题,只需要3个命令。 这个问题的想法是,ssh-add需要使用当前的ssh-agent sock文件path和pid号来设置SSH_AUTH_SOCK和SSH_AGENT_PID环境variables。

 ssh-agent -s > temp.txt 

这会将ssh-agent的输出保存在文件中。 文本文件的内容将是这样的:

 SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK; SSH_AGENT_PID=3044; export SSH_AGENT_PID; echo Agent pid 3044; 

从文本文件中拷贝“/tmp/ssh-kjmxRb2764/agent.2764”,直接在控制台运行下面的命令:

 set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764 

从文本文件中复制“3044”,直接在控制台中运行以下命令:

 set SSH_AGENT_PID=3044 

现在当环境variables(SSH_AUTH_SOCK和SSH_AGENT_PID)被设置为当前的控制台会话时,运行你的ssh-add命令,并且不会再次失败来连接ssh代理。

我使用$ eval ssh-agent -s来解决这个问题,而不是使用$ ssh-agent -s。

这是我一步一步(GitBash上的第2步):

  1. 清理我的.ssh文件夹在C:\用户\ .ssh \

  2. 生成一个新的SSH密钥
    $ ssh-keygen -t rsa -b 4096 -C“xyz@abc.com”

  3. 检查是否有进程标识(ssh代理)已经在运行。
    $ ps aux | grep ssh

  4. (可选)如果在步骤3中发现任何内容,请将其杀死
    $ kill <pids>

  5. 启动了ssh代理
    $ eval`ssh-agent -s`

  6. 添加了第2步中生成的ssh密钥到ssh代理
    $ ssh-add〜/ .ssh / id_rsa

为了扩大对Windows 7的n3o的答案…

我的问题的确是没有设置一些必需的环境variables,并且n3o是正确的,ssh-agent告诉你如何设置这些环境variables,但是并没有真正设置它们。

由于Windows不允许您执行“eval”,因此请执行以下操作:

将ssh-agent的输出redirect到一个batch file

 ssh-agent > temp.bat 

现在使用记事本等文本编辑器编辑temp.bat。 对于前两行中的每一行: – 在行的开头插入单词“set”和一个空格。 – 删除第一个分号和后面的所有内容。

现在删除第三行。 你的temp.bat应该是这样的:

 set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636 set SSH_AGENT_PID=8608 

运行temp.bat。 这将设置ssh-add所需的环境variables。

我碰到的一件事是,使用Cygwin的eval并不适用于我,对我来说是什么工作是ssh-agent ssh-add id_rsa

之后,我遇到了一个问题,我的私钥太开放,我find了解决办法(从这里 ):

 chgrp Users id_rsa 

以及

 chmod 600 id_rsa 

终于我能够使用:

 ssh-agent ssh-add id_rsa 

如果您按照这些说明,您的问题将被解决。

如果您在Mac或Linux机器上,请键入:

 eval "$(ssh-agent -s)" 

如果您在Windows机器上,请键入:

 ssh-agent -s 

我刚刚得到这个工作。 打开~/.ssh/config文件。

追加以下内容 –

 Host github.com IdentityFile ~/.ssh/github_rsa 

给我提示的页面为Git设置SSH表示单个空格缩进很重要…虽然我在Heroku中有一个configuration,但是没有这个空间并且工作正常。

让我提供另一种解决scheme。 如果您刚刚安装了Git 1.8.2.2或其附件,并且希望启用SSH,请按照精心编写的说明进行操作。

一切到步骤5.6,你可能会遇到轻微的障碍。 如果SSH代理已经在运行,则在重新启动bash时可能会收到以下错误消息

 Could not open a connection to your authentication agent 

如果是这样,请使用以下命令查看是否有多个ssh-agent进程正在运行

 ps aux | grep ssh 

如果您看到多个ssh-agent服务,则需要终止所有这些进程。 使用kill命令如下(在您的计算机上PID将是唯一的)

 kill <PID> 

例:

 kill 1074 

在你删除了所有的ssh-agent进程之后,运行px aux | grep ssh命令再次确定它们已经消失,然后重新启动Bash。

瞧,你现在应该得到这样的东西:

 Initializing new SSH agent... succeeded Enter passphrase for /c/Users/username/.ssh/id_rsa: 

现在你可以继续步骤5.7以上了。

连接服务器时使用参数-A,例如:

 ssh -A root@myhost 

从手册页:

 -A Enables forwarding of the authentication agent connection. This can also be specified on a per-host basis in a configuration file. Agent forwarding should be enabled with caution. Users with the ability to bypass file permissions on the remote host (for the agent's UNIX-domain socket) can access the local agent through the forwarded connection. An attacker cannot obtain key material from the agent, however they can perform operations on the keys that enable them to authenticate using the identities loaded into the agent. 

注:这是对这个问题的答案,已经与这个问题合并。 这个问题是针对Windows 7的,这意味着我的答案是Cygwin / MSYS / MSYS2。 这似乎是一些Unix,我不希望SSH代理需要像这样pipe理。

这将运行SSH代理和validation只有你第一次需要它 ,而不是每次你打开你的Bashterminal。 它一般可用于任何使用SSH的程序,包括ssh本身和scp 。 只需将其添加到/etc/profile.d/ssh-helper.sh

 ssh-auth() { # Start the SSH agent only if not running [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh # Identify the running SSH agent [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null # Authenticate (change key path or make a symlink if needed) [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add } # You can repeat this for other commands using SSH git() { ssh-auth; command git "$@"; } 

尝试以下操作:

 ssh-agent sh -c 'ssh-add && git push heroku master' 

我有这个问题,当我开始ssh代理,当它已经运行。 得到困惑。 要查看是否属于这种情况,请使用

 eval $(ssh-agent) 

看看这是否与你认为应该是一样的。 就我而言,这与我刚刚开始的那个不一样。

要进一步validation是否有多个ssh-agent正在运行,您可以查看:

 ps -ef | grep ssh 

我有一个类似的问题,当我试图让这个工作在Windows上连接到通过SSH存储

这是为我工作的解决scheme。

  1. 事实certificate,我在我的Windows机器上运行了Pageant ssh代理 – 我会检查你正在运行的是什么。 我怀疑它是页面,因为它与默认的腻子和winScp

  2. 对于这种types的代理,ssh-add不能从命令行工作

  3. 您需要通过浏览器UI窗口添加私钥,您可以通过双击任务栏中的Pageant图标(一旦启动)来获取该私钥。

  4. 在向Pageant添encryption钥之前,您需要将其转换为PPK格式。 完整的说明可在这里如何将SSH密钥转换为ppk格式

  5. 这就对了。 一旦我上传我的密钥隐藏,我可以使用SourceTree来创build本地回购和克隆远程。

希望这可以帮助…

阅读@蛋糕的解释答案 。 在这里,我只尝试自动修复。

如果在BASH中使用Cygwinterminal,请将以下内容添加到$ HOME / .bashrc文件中。 这只能在第一个Bashterminal启动一次ssh-agent,并将密钥添加到ssh-agent。 (不知道这是否需要在Linux上)

 ########################### # start ssh-agent for # ssh authentication with github.com ########################### SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh if [ ! -e $SSH_AUTH_SOCK_FILE ]; then # need to find SSH_AUTH_SOCK again. # restarting is an easy option pkill ssh-agent fi # check if already running SSH_AGENT_PID=`pgrep ssh-agent` if [ "x$SSH_AGENT_PID" == "x" ]; then # echo "not running. starting" eval $(ssh-agent -s) > /dev/null rm -f $SSH_AUTH_SOCK_FILE echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null #else # echo "already running" fi source $SSH_AUTH_SOCK_FILE 

不要忘记在“ssh-add”命令中添加正确的密钥。

对于内置于Windows 10的bash,我将其添加到.bash_profile:

 if [ -z $SSH_AUTH_SOCK ]; then if [ -r ~/.ssh/env ]; then source ~/.ssh/env if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then rm ~/.ssh/env unset SSH_AUTH_SOCK fi fi fi if [ -z $SSH_AUTH_SOCK ]; then ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env chmod 600 ~/.ssh/env source ~/.ssh/env > /dev/null 2>&1 fi 

我通过强制停止(杀死)git进程(ssh代理),然后卸载Git,然后再次安装Git来解决错误。

在Win8.1E上使用Git Bash,我的决议如下:

 eval $(ssh-agent) > /dev/null ssh-add ~/.ssh/id_rsa 

如果您使用Putty,则可能需要将“连接/ SSH /身份validation/允许代理转发”选项设置为“true”。

在这里输入图像描述

这对我有效。

在CMD窗口中,键入以下命令:

 cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin) bash exec ssh-agent bash ssh-add path/to/.ssh/id_rsa 

运行ssh-agent的基本解决scheme在许多答案中得到了回答。 然而,多次运行ssh-agent (每个打开的terminal或每个远程login)都会在内存中创build多个ssh-agent 。 build议避免该问题的脚本很长,需要编写和/或复制分离的文件,或者需要在~/.profile~/.schrc写入太多的string。 我build议简单的两个string解决scheme:

对于shbash等:

 # ~/.profile if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi . ~/.ssh-agent.sh 

对于cshtcsh等:

 # ~/.schrc sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi' eval `cat ~/.ssh-agent.tcsh` 

这里是什么:

  • 按名称和当前用户search进程ssh-agent
  • 通过调用ssh-agent创build合适的shell脚本文件,如果没有find当前用户的ssh-agent进程,则运行ssh-agent本身
  • 评估创build的configuration适当环境的shell脚本

不需要保护创build的shell脚本~/.ssh-agent.tcsh~/.ssh-agent.sh不受其他用户访问,因为:与ssh-agent at-first通信是通过受保护的套接字进行处理的,另一个用户,而在另一个用户可以通过/tmp/目录中的枚举文件简单地findssh-agent套接字。 至于关于访问ssh-agent进程,这是相同的事情。

在我的情况下,我的Comodo防火墙已经沙箱代理ssh。 一旦我禁用沙盒,我能克隆存储库。

仅供参考,我在Windows 7上使用Comodo防火墙。

即使我是“无法打开连接到您的身份validation代理”。 在生成和添加SSH密钥时运行该命令: ssh-add ~/.ssh/id_rsa 。 我通过停止运行在我的机器上的多个ssh-agent实例来解决这个问题,然后从我的Windows机器上的控制面板卸载Git,然后再次安装Git,现在正在工作。

同时检查你的远程url。 使用git @ github …而不是https:// proptocol

请参阅https://stackoverflow.com/a/33928364/551811