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

我遇到了这个错误:

$ git push heroku masterWarning: 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.pubCould not open a connection to your authentication agent.
1910352 次浏览

ssh-add和ssh(假设您使用的是openssh实现)需要一个环境变量才能知道如何与ssh代理通信。如果您在与您现在使用的命令提示符窗口不同的命令提示符窗口中启动代理,或者您启动错误,ssh-add和ssh都不会看到该环境变量设置(因为环境变量被设置为当地到它设置的命令提示符)。

你没有说你使用的是哪个版本的ssh,但是如果你使用的是cygwin的,你可以使用Cygwin上的SSH特工中的这个配方:

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

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

msysgit或cygwin

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

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

  2. 打开文件并粘贴:

    #!/bin/basheval `ssh-agent -s`ssh-add
  3. This assumes that your key is in the conventional ~/.ssh/id_rsa location. If it isn't, include a full path after the ssh-add command.

  4. Add to or create file ~/.ssh/config with the contents

    ForwardAgent yes

    在原始教程中,ForwardAgent参数是Yes,但这是一个错别字。使用所有小写,否则你会得到错误。

  5. 重新启动Msysgit。它会要求您输入一次密码,仅此而已(直到您结束会话,或者您的ssh代理被杀死。)

mac/osx

如果您不想每次打开终端时都启动一个新的ssh代理,请查看钥匙串。我现在在Mac上,所以我使用教程在Mac OS X上带有zsh和钥匙串的ssh代理来设置它,但我相信谷歌搜索会有很多关于Windows的信息。

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

ssh-add -K ~/.ssh/id_rsa

就这么简单。

让我提供另一种解决方案。如果您刚刚安装了Git1.8.2.2左右,并且您想启用SSH,请按照编写良好的方向进行操作。

直到步骤5.6,您可能会遇到一些小问题。如果SSH代理已经在运行,您可能会在重新启动bash时收到以下错误消息

Could not open a connection to your authentication agent

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

ps aux | grep ssh

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

kill <PID>

示例:

kill 1074

删除所有ssh代理进程后,再次运行px aux|grep ssh命令以确保它们消失,然后重新启动Bash。

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

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

现在您可以继续步骤5.7及以后。

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

要解决此错误:

bash:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

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


热点提示:

我总是忘记为上面的ssh代理命令键入什么,所以我在我的.bashrc文件中创建了一个别名,如下所示:

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

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

例如。

$ ssh-agent-cygSSH_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启动代理,但它并没有真正设置它运行的环境变量。它只是将这些变量输出到shell。

您需要:

eval `ssh-agent`

然后执行ssh-add。请参阅无法打开到您的身份验证代理的连接

你开始ssh-agent吗?

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

eval `ssh-agent -s`ssh-add

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

请看以下答案:

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

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

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

SSH需要两个东西才能使用ssh-agent:一个在后台运行的ssh-agent实例,以及一个环境变量集,它告诉SSH应该使用哪个套接字连接到代理(SSH_AUTH_SOCKIIRC)。

这一评论

公钥vs私钥

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

尝试执行以下步骤:

  1. 打开gitbash并运行:cd ~/.ssh

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

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

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

exec ssh-agent bash

要放大Windows 7的n3o的回答

我的问题确实是一些必需的环境变量没有设置,n3o是正确的,ssh-agent告诉您如何设置这些环境变量,但实际上并没有设置它们。

由于Windows不允许您进行“评估”,因此应该这样做:

将ssh代理的输出重定向到批处理文件

ssh-agent > temp.bat

现在使用文本编辑器(如记事本)编辑temp.bat.对于前两行中的每一行:

  • 在行首加上"set"一词和一个空格。
  • 删除第一个分号和后面的所有内容。

现在删除第三行。您的temp.bat应该如下所示:

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

运行temp.bat。这将设置ssh-add工作所需的环境变量。

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

eval $(ssh-agent)

更多信息:https://coderwall.com/p/rdi_wq网络存档版本

我刚开始工作。打开你的~/.ssh/config文件。

附加以下条文─

Host github.comIdentityFile ~/.ssh/github_rsa

给我提示为Git设置SSH的页面说,单一的空间缩进是重要的……虽然我有一个配置在这里从Heroku没有空间和正常工作。

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

甚至我得到“无法打开到您的身份验证代理的连接”在生成和添加密钥时运行命令SSH:ssh-add ~/.ssh/id_rsa

我通过停止在我的机器上运行的多个ssh-agent实例来解决它,然后从我的Windows机器上的控制面板卸载Git,然后再次安装Git,现在一切正常。

在我的例子中,我的科摩多防火墙对ssh代理进行了沙箱处理。一旦我禁用沙箱,我就能够克隆存储库。

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

我遇到的一件事是eval对我使用Cygwin不起作用,对我有效的是ssh-agent ssh-add id_rsa

在那之后,我遇到了一个问题,我的私钥太开放了,我设法找到了解决方案(从这里):

chgrp Users id_rsa

以及

chmod 600 id_rsa

最后,我能够使用:

ssh-agent ssh-add id_rsa

这将运行SSH代理并验证只有在你第一次需要的时候,而不是每次打开Bash终端。它可用于任何使用SSH的程序,包括ssh本身和#1。只需将此添加到/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 SSHgit() { ssh-auth; command git "$@"; }

备注:这是这个问题的答案,已与此合并。这个问题是针对Windows 7的,这意味着我的答案是针对Cygwin/MSYS/MSYS2的。这个似乎适用于某些Unix,我不希望SSH代理需要这样管理。

Windows8.1 E上使用gitbash,我的分辨率如下:

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

当我启动ssh代理时,当它已经运行时,我遇到了这个问题。似乎多个实例相互冲突。

要查看ssh代理是否已经运行,请检查SSH_AGENT_SOCK环境变量的值:

echo $SSH_AGENT_SOCK

如果设置了,则代理可能正在运行。

要检查是否有多个ssh代理正在运行,您可以查看:

ps -ef | grep ssh

当然,您应该删除您创建的任何其他实例。

如果你遵循这些指示,你的问题就会得到解决。

如果您使用的是Mac或Linux机器,请键入:

eval "$(ssh-agent -s)"

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

ssh-agent -s

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

这是对我有效的解决方案。

  1. 原来我在我的Windows机器上运行了Pageant ssh代理-我会检查你在运行什么。我怀疑它是Pageant,因为它是PuTTY和WinSCP的默认设置。

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

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

  4. 在将密钥添加到Pageant之前,您需要将其转换为PPK格式。完整的说明可在此处如何将SSH键转换为ppk格式

  5. 就是这样。一旦我将密钥上传到stash,我就可以使用Sourcetree创建一个本地存储库并克隆远程。

“代理转发”是一种可以帮助您的技术。这使得本地SSH密钥在服务器内的活动会话期间“可用”。

如果您在Windows上使用PuTTY,则需要将“连接/SSH /Auth/Allow代理转发”选项设置为“true”。

在此输入图片描述

工作对我来说。

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

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

尝试以下操作:

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

在Windows 10中,我尝试了这里列出的所有答案,但似乎都不起作用。事实上,它们提供了线索。要解决问题,只需三个命令。这个问题的想法是ssh-add需要使用当前ssh-agent sock文件路径和pid号设置SSH_AUTH_SOCK和SSH_AGENT_PID环境变量。

ssh-agent -s > temp.txt

这将把ssh代理的输出保存在一个文件中。文本文件内容如下所示:

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

现在,当为当前控制台会话设置环境变量(SSH_AUTH_SOCK和SSH_AGENT_PID)时,运行ssh-add命令,连接到ssh代理不会再次失败。

阅读user456814的回答以获得解释。在这里我只是尝试自动修复。

如果您使用带有Bash的Cygwin终端,请将以下内容添加到$HOME/. bashrc当前页面文件中。这只会在第一个Bash终端中启动ssh代理一次,并将键添加到ssh代理。(我不确定Linux是否需要这样做。)

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

别忘了在“ssh-add”命令中添加正确的密钥。

还要检查您的远程URL。使用git@github…而不是https://协议。

通过自定义端口上的SSHGitEx的和PuTTY

对于Windows中的PowerShell

我在使用PowerShell和Start-SshAgent/Add-SshKey命令时遇到了麻烦,所以我编写了一个快速脚本,可能会帮助一些人。这是为了添加到您的PowerShell配置文件中,您可以通过执行notepad $PROFILE进行编辑:

if ($(Get-Process ssh-agent) -eq $null){$ExecutionContext.InvokeCommand.ExpandString($(ssh-agent -c).Replace("setenv", "set"));}

它将检测ssh-agent是否正在运行,并且仅在没有代理正在运行的情况下执行。请注意,$ExecutionContext.InvokeCommand.ExpandString是一个非常危险的命令,因此如果您使用的是不受信任的ssh-agent副本,您可能不想使用此解决方案。

我没有使用ssh-agent -s,而是使用eval `ssh-agent -s` 来解决这个问题。

这是我一步一步地执行的(从gitbash开始的第2步):

  1. C:\user\<username>\.ssh\清理我的. ssh文件夹
  2. 生成一个新的SSH密钥:ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. 检查是否有进程ID(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 10中内置的Bash,我将其添加到文件.bash_profile

if [ -z $SSH_AUTH_SOCK ]; thenif [ -r ~/.ssh/env ]; thensource ~/.ssh/envif [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; thenrm ~/.ssh/envunset SSH_AUTH_SOCKfififi
if [ -z $SSH_AUTH_SOCK ]; thenssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/envchmod 600 ~/.ssh/envsource ~/.ssh/env > /dev/null 2>&1fi

连接到服务器时使用参数-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'sUNIX-domain socket) can access the local agent through the forwardedconnection.  An attacker cannot obtain key material from the agent,however they can perform operations on the keys that enable them toauthenticate using the identities loaded into the agent.

这是我在使用PowerShell时想出的解决方案。

将以下函数添加到您的Microsoft.PowerShell_profile.ps1

function RunSsh($userIdentity ) {$agent=ssh-agent$position=$agent[0].IndexOf("=")$ending=$agent[0].IndexOf(";")
$variableStartPosition=$agent[0].IndexOf("export")$variableEndPosition=$agent[0].LastIndexOf(";")$variableName=$agent[0].Substring($variableStartPosition+7,$variableEndPosition-$variableStartPosition-7)[Environment]::SetEnvironmentVariable($variableName, $agent[0].Substring($position+1,$ending-$position-1))
$position=$agent[1].IndexOf("=")$ending=$agent[1].IndexOf(";")
$variableStartPosition=$agent[1].IndexOf("export")$variableEndPosition=$agent[1].LastIndexOf(";")$variableName=$agent[1].Substring($variableStartPosition+7,$variableEndPosition-$variableStartPosition-7)[Environment]::SetEnvironmentVariable($variableName, $agent[1].Substring($position+1,$ending-$position-1))
if($userIdentity.Length -eq 0) {ssh-add} else {ssh-add $userIdentity}}

现在,您可以从命令行运行RunSsh,它使用~\.ssh文件夹中的身份文件,或者传入RunSsh C:\ssh\id_rsa的身份文件,其中C:\ssh\id_rsa是您的身份文件。

为此,您需要在path环境变量中包含ssh-addssh-agent

运行ssh-agent的基本解决方案在许多答案中得到了回答。然而,多次运行ssh-agent(每个打开的终端或每个远程登录)将在内存中创建许多ssh-agent副本。建议避免该问题的脚本很长,需要写入和/或复制分离的文件,或者需要在~/.profile~/.schrc中写入太多字符串。让我建议简单的两串解决方案:

对于shbash等:

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

对于cshtcsh等:

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

这里有什么:

  • 通过名称和当前用户搜索进程ssh-agent
  • 通过调用ssh-agent创建适当的外壳脚本文件,如果没有找到当前用户ssh-agent进程,则运行ssh-agent本身
  • 评估创建的外壳脚本,配置适当的环境

没有必要保护创建的外壳脚本~/.ssh-agent.tcsh~/.ssh-agent.sh免受其他用户的访问,因为:首先与ssh-agent的通信是通过受保护的套接字处理的,其他用户无法访问,第二个用户可以通过/tmp/目录中的枚举文件找到ssh-agent套接字简单。至于访问ssh-agent进程,这是同样的事情。

运行

ssh-agent bashssh-add

要获取更多详细信息,您可以搜索

ssh-agent

或运行

man ssh-agent

我在ubuntu上遇到了同样的问题,其他解决方案对我没有帮助。

我终于意识到我的问题是什么。我在/root/.ssh文件夹中创建了我的SSH密钥,所以即使我以root身份运行ssh-add,它也无法正常工作,并一直说:

无法打开到您的身份验证代理的连接。

我在/home/myUsername/文件夹中创建了我的SSH公钥和私钥

ssh-agent /bin/sh

然后我跑了

ssh-add /home/myUsername/.ssh/id_rsa

问题就这样解决了。

备注:要在Git中访问您的存储库,请在使用ssh-keygen -t rsa -C "your Git email here"创建SSH密钥时添加您的Git密码。

对于Windows用户,我发现cmdeval `ssh-agent -s` 不起作用,但使用gitbash起作用:

eval `ssh-agent -s`; ssh-add KEY_LOCATION

并确保Windows服务“OpenSSH密钥管理”未被禁用。

在Windows 10中,使用命令提示符终端,以下操作适用于我:

ssh-agent cmdssh-add

然后,您应该被要求在此之后输入密码:

Enter passphrase for /c/Users/username/.ssh/id_rsa:

我在尝试下载Git存储库时遇到了这个错误:

无法打开到您的身份验证代理的连接。ssh-add退出代码2

要删除此错误:

你既不需要#0也不需要#1当您使用无密码私钥时。参见在docker文件中将私钥添加到ssh代理

如果您正确对待它(使用后删除它),无密码私钥不需要使系统不安全。也许这也有助于解决这个Heroku问题?


这个“技巧”什么时候最相关?在Dockerfile中!

确保您键入的是“"$(ssh代理-s)"”而不是“"ssh-Agent-s"的定义

在~/. ssh中创建配置文件并设置PERMANENTLY,主机可以是ip/域在Windows10中进行测试

Host 20.16.4.5IdentityFile ~/.ssh/id_rsa_ec2

如果您想通过. pem到pub。在aws中使用1将PEM中的私钥复制到. ssh文件夹

$ cp /path/to/my-aws-ec2-instance.pem ~/.ssh/id_rsa_ec2

2生成并保存公钥

 ssh-keygen -y -f /path/to/my-aws-ec2-instance.pem > ~/.ssh/id_rsa_ec2.pub

然后设置(手动将密钥添加到代理永久),然后使用不带pem的ec2SSHec2-user@ec2-ip.compute-x.amazonaws.com

这个解决方案有可能对你有用试一次

在我的情况下,它与DNS映射有关(比特桶没有指向正确的IP)我通过一个简单的技巧修复了它(我在寻找bitbucket.org时覆盖了IP地址)

在ubuntu中打开和编辑 /etc/hosts(在任何其他操作系统的情况下,请看看你怎么能做同样的事情)

sudo vim /etc/hosts

并添加以下行(在GitHub或任何其他网站的情况下,查找IP并相应地进行映射)

18.205.93.2 bitbucket.org

这样就能解决问题了

我犯了一个非常重要和愚蠢的错误-没有在~/. ssh文件夹中生成密钥。在开始github上描述的所有步骤之前,改成~/. ssh。这解决了我的问题

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent