我遇到了这个错误:
$ 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.
30 回答
我遇到的一件事是
eval
对我来说不适合使用Cygwin,对我有用的是ssh-agent ssh-add id_rsa
.之后我遇到了一个问题,我的私钥太开放了,我设法找到的解决方案(来自here):
以及
最后我能够使用:
你启动ssh-agent了吗?
您可能需要在运行
ssh-add
命令之前启动ssh-agent
:请注意,这将启动 msysgit Bash on Windows 的代理 . 如果您使用的是其他shell或操作系统,则可能需要使用该命令的变体,例如other answers中列出的变体 .
请参阅以下答案:
ssh-add complains: Could not open a connection to your authentication agent
Git push requires username and password(包含有关如何使用ssh-agent的详细说明)
How to run (git/ssh) authentication agent? .
Could not open a connection to your authentication agent
要自动启动ssh-agent并允许单个实例在多个控制台窗口中工作,请参阅Start ssh-agent on login .
为什么我们需要使用eval而不仅仅是ssh-agent?
要找出原因,请参阅Robin Green's answer .
公钥与私钥
此外,每当我使用
ssh-add
时,我总是添加私钥 . 文件~/.ssh/id_rsa.pub
看起来像一个公钥,我不确定这是否有效 . 你有一个~/.ssh/id_rsa
文件吗?如果你在文本编辑器中打开它,它是否说它是私钥?我尝试了其他解决方案无济于事 . 我做了更多研究,发现以下命令有效 . 我正在使用Windows 7和Git Bash .
更多信息:https://coderwall.com/p/rdi_wq
以下命令对我有用 . 我正在使用CentOS .
MsysGit或Cygwin
如果您正在使用Msysgit或Cygwin,您可以在SSH-Agent in msysgit and cygwin and bash找到一个很好的教程:
将名为
.bashrc
的文件添加到您的主文件夹 .打开文件并粘贴到:
这假设您的密钥位于传统的
~/.ssh/id_rsa
位置 . 如果不是,请在ssh-add
命令后包含完整路径 .添加或创建包含内容的文件
~/.ssh/config
在原始教程中,
ForwardAgent
param是Yes
,但是's a typo. Use all lowercase or you' ll会出错 .Mac / OS X.
如果您不想在每次打开终端时启动新的ssh-agent,请查看Keychain . 我现在在Mac上,所以我使用了教程ssh-agent with zsh & keychain on Mac OS X进行设置,但我确信Google搜索会有大量的Windows信息 .
Update :Mac上更好的解决方案是将密钥添加到Mac OS Keychain:
就那么简单 .
无法打开与身份验证代理的连接
要解决此错误:
庆典:
tcsh中:
然后像往常一样使用
ssh-add
.Hot Tip:
我总是忘记为上面的ssh-agent命令输入什么,所以我在我的
.bashrc
文件中创建了一个别名,如下所示:现在不用
ssh-agent
,我可以使用ssh-agent-cyg
例如 .
原始修复源:
http://cygwin.com/ml/cygwin/2011-10/msg00313.html
我在Linux上遇到了同样的问题,这就是我所做的:
基本上,命令ssh-agent启动代理,但它并没有真正设置环境变量来运行它 . 它只是将这些变量输出到shell .
你需要:
然后执行ssh-add . 见Could not open a connection to your authentication agent .
ssh-add和ssh(假设您使用的是openssh实现)需要一个环境变量来知道如何与ssh代理进行通信 . 如果您在不同的命令提示符窗口中将代理程序启动到您现在使用的代理程序窗口,或者如果启动错误,则ssh-add和ssh都不会看到该环境变量集(因为环境变量在本地设置为命令提示它已设置) .
你不能使用,但如果你're using cygwin',你可以使用SSH Agent on Cygwin中的这个食谱:
这将为您打开的每个新命令提示符窗口自动启动代理程序(如果您在一个会话中打开多个命令提示符,这是次优的,但至少它应该工作) .
尝试以下步骤:
1)打开Git Bash并运行:
cd ~/.ssh
2)尝试运行代理:
eval $(ssh-agent)
3)现在,您可以运行以下命令:
ssh-add -l
我没有使用
$ ssh-agent -s
,而是使用了$ eval
ssh-agent -s`` 来解决这个问题 .这是我一步一步执行的(GitBash上的第2步):
在
C:\user\<username>\.ssh\
清理了我的.ssh文件夹生成新的SSH密钥
$ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
检查是否有任何进程ID(ssh代理)已在运行 .
$ ps aux | grep ssh
(可选)如果在步骤3中找到任何内容,则执行kill那些
$ kill <pids>
启动了ssh代理
$ eval
ssh-agent -s``在步骤2中为ssh代理添加了ssh密钥
$ ssh-add ~/.ssh/id_rsa
在Windows 10中,我尝试了此处列出的所有答案,但它们似乎都没有效果 . 事实上,他们给出了一个线索 . 要解决问题,只需要3个命令 . The idea of this problem is that ssh-add needs SSH_AUTH_SOCK and SSH_AGENT_PID environment variables to be set with current ssh-agent sock file path and pid number.
这将在文件中保存ssh-agent的输出 . 文本文件内容将是这样的:
从文本文件中复制类似“/tmp/ssh-kjmxRb2764/agent.2764”的内容,并直接在控制台中运行以下命令:
从文本文件中复制类似“3044”的内容,并直接在控制台中运行以下命令:
现在,当为当前控制台会话设置环境变量(SSH_AUTH_SOCK和SSH_AGENT_PID)时,运行ssh-add命令,它不会再次失败以连接ssh代理 .
放大n3o对Windows 7的回答......
我的问题确实是没有设置一些必需的环境变量,并且n3o是正确的,ssh-agent告诉你如何设置这些环境变量,但实际上并没有设置它们 .
由于Windows不允许您执行“eval”,因此以下是做什么:
使用ssh-agent的输出重定向到批处理文件
现在使用记事本等文本编辑器编辑temp.bat . 对于前两行中的每一行: - 在行的开头插入单词“set”和空格 . - 删除第一个分号及其后的所有内容 .
现在删除第三行 . 你的temp.bat应该是这样的:
运行temp.bat . 这将设置ssh-add工作所需的环境变量 .
我刚刚开始工作了 . 打开
~/.ssh/config
文件 .附上以下内容 -
给我提示的页面Set up SSH for Git表示单个空格缩进很重要......虽然我在这里有一个来自Heroku的配置没有那个空间并且工作正常 .
如果您按照这些说明操作,您的问题就会得到解决 .
如果您使用的是Mac或Linux计算机,请键入:
如果您使用的是Windows计算机,请键入:
让我提供另一种解决方案 . 如果你刚刚安装了Git 1.8.2.2或者你想要启用SSH,请按照写得好的directions进行操作 .
一直到步骤5.6,你可能会遇到轻微的障碍 . 如果SSH代理已在运行,则在重新启动bash时可能会收到以下错误消息
如果这样做,请使用以下命令查看是否正在运行多个ssh-agent进程
如果您看到多个ssh-agent服务,则需要终止所有这些进程 . 使用kill命令如下(PID将在您的计算机上是唯一的)
例:
删除所有ssh-agent进程后,运行px aux | grep ssh命令再次确定它们已经消失,然后重新启动Bash .
瞧,你现在应该得到这样的东西:
现在,您可以继续执行步骤5.7及更高版本 .
这将运行SSH代理并仅在您第一次需要时进行身份验证,而不是每次打开Bash终端时都进行身份验证 . 它可以用于任何使用SSH的程序,包括ssh本身和scp . 只需将其添加到
/etc/profile.d/ssh-helper.sh
:连接到服务器时使用参数-A,例如:
来自手册页:
许多答案都回答了运行
ssh-agent
的基本解决方案 . 但是,多次运行ssh-agent
(每个打开的终端或每个远程登录)将在内存中创建许多副本otssh-agent
. 建议避免该问题的脚本很长,需要编写和/或复制分离的文件,或者需要在~/.profile
或~/.schrc
中写入太多字符串 . 我建议 simple two string solution:对于 sh , bash 等:
对于 csh , tcsh 等:
这是什么:
按名称搜索进程
ssh-agent
当前用户通过调用
ssh-agent
创建适当的shell脚本文件,如果没有找到当前用户ssh-agent
进程,则运行ssh-agent
本身评估创建的shell脚本,它配置适当的环境
没有必要保护创建的shell脚本
~/.ssh-agent.tcsh
或~/.ssh-agent.sh
来自其他用户的访问权限,因为:通过受保护的套接字处理与ssh-agent
的第一次通信,而其他用户无法访问,而且其他用户可以通过枚举找到ssh-agent
套接字简单/tmp/
目录中的文件 . 至于访问ssh-agent
进程它是一样的东西 .请尝试以下方法:
我有这个问题,当我启动ssh-agent时,它已经运行了 . 迷茫 . 要查看是否是这种情况,请使用
看看这是否和你想象的一样 . 就我而言,它与我刚刚开始时的不同 .
要进一步验证您是否运行了多个ssh-agent,可以查看:
当我试图在Windows上通过ssh连接到stash时,我遇到了类似的问题
这是适合我的解决方案 .
结果我在我的Windows机器上运行了Pageant ssh代理 - 我会检查你在运行什么 . 我怀疑它是Pageant,因为它是默认的Putty和winScp
ssh-add在命令行中不适用于此类代理
您需要通过选美UI窗口添加私钥,您可以通过双击任务栏中的Pageant图标(启动后)来获取私钥 .
在将关键字添加到Pageant之前,您需要将其转换为PPK格式 . 完整的说明在这里How to convert SSH key to ppk format
就是这样 . 一旦我将密钥上传到stash,我就可以使用SourceTree创建本地仓库并克隆远程 .
希望这可以帮助...
阅读@cupcake's answer以获得解释 . 在这里,我只尝试自动修复 .
如果将Cygwin终端与BASH一起使用,请将以下内容添加到$ HOME / .bashrc文件中 . 这只在第一个Bash终端启动ssh-agent一次,并将密钥添加到ssh-agent . (不确定Linux上是否需要这样做)
不要忘记在“ssh-add”命令中添加正确的密钥 .
我通过强制停止(杀死)git进程(ssh代理),然后卸载Git,然后再次安装Git来解决错误 .
如果您使用Putty,可能需要将“Connection / SSH / Auth / Allow agent forwarding”选项设置为“true” .
这个worked对我来说 .
您可以使用此命令: ssh-agent bash 然后运行ssh-add . 更多细节,你可以搜索 ssh-agent 或命令 man ssh-agent
在Win8.1E上使用Git Bash,我的解决方案如下:
对于Windows 10中内置的bash,我将其添加到.bash_profile:
在我的情况下,我的Comodo firewall已经沙箱化了ssh代理 . 一旦我禁用了沙盒,我就能够克隆存储库 .
仅供参考,我在Windows 7上使用Comodo防火墙 .
甚至在生成和添加SSH密钥时运行命令时"Could not open a connection to your authentication agent.":
ssh-add ~/.ssh/id_rsa
. 我通过停止在我的机器上运行的多个ssh-agent
实例解决了这个问题,然后从我的Windows机器上的控制面板上卸载了Git,然后再次安装了Git,现在一切正常 .