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


1603

我遇到以下错误:

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

26
问题:浏览完此页面上的每个答案后,它们都不起作用。接下来您该怎么办?
布兰登·贝特尔森

8
@BrandonBertelsen试试这个: $ ssh-agent /bin/sh$ ssh-add $yourkey
希亚姆

@BrandonBertelsen接下来,您应使用它git config --list来查看是否已设置credential.helper-如果您已设置,则应删除此设置,因为帮助程序无济于事。
yoyo

Answers:


2381

你开始了ssh-agent吗?

您可能需要先启动ssh-agent才能运行ssh-add命令:

eval `ssh-agent -s`
ssh-add

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

请参阅以下答案:

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

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

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

要找出原因,请参阅Robin Green的答案

公钥与私钥

另外,无论何时使用ssh-add,我总是向其添加私钥。该文件~/.ssh/id_rsa.pub看起来像一个公钥,我不确定是否可以使用。你有~/.ssh/id_rsa文件吗?如果您在文本编辑器中将其打开,是否表示它是私钥?


17
@xtian我不确定我是否理解此问题。我不知道确切的详细信息,但是我猜想私有密钥永远不会通过网络发送。我认为ssh-add只是在主机上解密加密的私钥,以便可以在本地使用它…… 永远不会发送给任何人。我猜想只有公钥是通过网络发送的。我的理解不正确吗?

5
你太客气了。你是绝对正确的。我的错。在这里 ; ssh-add为用户的ssh-agent添加了私钥(运行进程),该私钥可以代表客户机/主机,服务器接受rsa-whatever密钥。真是的 我不知道是什么让我如此兴奋。
xtian

21
我很好奇为什么eval ssh-agent -s行得通,但ssh-agent单靠行不通。
DanielM 2014年

12
@DanielM:SSH要使用ssh-agent,需要两件事:一个在后台运行的ssh-agent实例,以及一个环境变量集,该变量告诉SSH应该使用哪个套接字连接到代理(SSH_AUTH_SOCKIIRC)。如果仅运行,ssh-agent则代理将启动,但是SSH将不知道在哪里可以找到它。
Vanessa Phipps

4
感谢您的回复。我只是注意到您在命令中使用了反引号。我很困惑,为什么在bash shell中反引号(`)可用于eval命令而不是单引号/双引号(',“)?
曾为时

538

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

eval $(ssh-agent)

有关更多信息,请访问:https : //coderwall.com/p/rdi_wq


14
也适用于Windows 8。
安德烈亚斯·鲁道夫2014年

我也使用Windows 7和Git Bash,我的回答也很好。您也可以通过这种方式也很酷。

2
太好了!也适用于Windows 10。
NitinM

1
在Manjaro上工作
code_flow

1
$ eval“ $(ssh-agent -s)”在Windows 10上为我工作
Andrew Anderson

260

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

exec ssh-agent bash

3
谢谢,这对我有用,我为我的shell运行了'exec ssh-agent zsh'。
jasonmcclurg 2014年

2
根据此删除的“答案”,它也适用于Amazon Linux AMI。我猜这是Unix / Linux / * nix解决方案。

4
我把它缩进了docker容器中,ssh-add my.id_rsa将对我失败。但是exec ssh-agent zsh给了一个我可以ssh-add毫无问题的环境。而且我在我的
docker

谁能简要解释一下这个问题可能是什么?谢谢:)这也适用于我的Ubuntu 14.04。
harkirat1892 '02

也在树莓上工作
mega_creamery

215

MsysGit或Cygwin

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

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

  2. 打开文件并粘贴:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
    
  3. 假设您的钥匙在常规~/.ssh/id_rsa位置。如果不是,请在ssh-add命令后添加完整路径。

  4. 添加或创建~/.ssh/config包含内容的文件

    ForwardAgent yes
    

    在原始教程中,ForwardAgentparam是Yes,但这是一个错字。使用所有小写字母,否则会出错。

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

Mac / OS X

如果您不想在每次打开终端时都启动新的ssh-agent,请签出Keychain。我现在在Mac上,因此我在Mac OS X上使用了带有ssh-agent和zsh&keychain的教程来进行设置,但是我敢肯定Google搜索会为Windows提供很多信息。

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

ssh-add -K ~/.ssh/id_rsa

就那么简单。



1
当我eval `ssh-agent -s`退出cygwin时,该过程不会停止。
基里尔2014年

有没有一种方法可以为Windows / gitbash设置配置,所以您不必每次都这样做?
mix3d

4
应该是ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)-否则每次都会启动一个新的ssh-agent。当用户进行cronjobs时,有时会杀死我的机器。
粉碎

3
ForwardAgent yes如果为任何不受信任的服务器设置了安全性,则没有必要,并且这是非理论上的安全风险。无论此设置如何,对密钥代理的本地访问均应起作用。
SeldomNeedy

208

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

解决此错误的方法:

重击:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

然后ssh-add照常使用。


热门提示:

我总是忘记上面的ssh-agent命令键入什么,因此我在.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


3
您将需要在eval每次以前运行时运行该命令ssh-agent。我现在使用别名,有关如何执行此操作的信息,请参见更新后的答案。
克里斯·斯诺


我还需要使用ssh规范来代替https(见help.github.com/articles/changing-a-remote-s-url
RunHolt

1
先生,您太棒了。谢谢。**克隆bitbucket存储库时,我遇到了同样的问题,我已经设置了ssh密钥,但一直出现错误:fatal: Could not read from remote repository.
Nishant Ghodke '17

在Windows 10上为我工作并安装了git bash
desmond13

116

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

基本上,命令ssh-agent启动代理,但实际上并没有设置要运行的环境变量。它只是将这些变量输出到外壳。

你需要:

eval `ssh-agent`

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



在Windows上使用boot2docker遇到问题时也为我工作。
Veve 2015年

这就是我需要的。
汤姆

115

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

这将为您打开的每个新命令提示符窗口自动启动代理(如果您在一个会话中打开多个命令提示符,则不是最佳选择,但至少应该可以使用)。



9
我是从另一个SO问题链接到这里的。请问为什么有必要将其添加到Bash配置文件中?在我的机器上,我所需要做的就是运行,eval $(ssh-agent)并且可以为每个新的终端窗口使用无密码的ssh。
安迪J

除非您要从该终端启动新终端,否则这不可能。
罗宾·格林

113

ssh-agent bash
ssh-add

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

ssh-agent

或跑步

man ssh-agent

7
我建议如果您在Windows上使用git bash,请尝试此操作。
Neeraj Sewani

@ neer17这使我可以ssh-copy-id在ubuntu 上使用。不确定为什么不使用ssh-agentbash 无法添加密钥。
SomeGuyOnAComputer

2
这是Windows版的!(在W10pro build 1809和git 2.21.0上测试)
Alfabravo

我正在使用ZSH,这对我ssh-agent zsh; ssh-add
有用

97

尝试执行以下步骤:

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

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

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


9
这是这里唯一适用于我的解决方案(在Windows 7上)。首先,我使用里克答案中的ps aux | grep sshkill命令杀死特工。之后,ssh-add无需使用-l开关即可工作(使用-l给出了错误)。eval 'ssh-agent'因为里克的答案没有用,所以我不得不eval $(ssh-agent)在这里像切克罗的答案那样使用。
Frug 2014年

6
+1我遇到了与OP(Windows 7)完全相同的问题,这是唯一对我有用的解决方案。
Weblurk


2
@Frug这是反引号,不是撇号;在shell脚本中,这意味着执行其中包含的内容。$(ssh-agent)等效`ssh-agent`但更具可读性。
MM

96

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

这是我逐步执行的操作(从GitBash的第2步开始):

  1. 在清理我的.ssh文件夹 C:\user\<username>\.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. 向ssh代理添加了在步骤2中生成的ssh密钥
    $ ssh-add ~/.ssh/id_rsa

3
“ eval”不能识别为内部或外部命令,可操作程序或批处理文件。
Chutipong Roobklom

您可以通过eval重新启动代理ssh-agent -s并使用ssh-add〜/ .ssh / id_rsa添加旧密钥。如果您生成新的SSH密钥,那么你将需要更新您的所有服务,如github上,到位桶,等那个键
莫希特萨蒂什·帕瓦尔

有什么办法可以使Windows重新启动吗?重新启动后,直到我ssh-agent -s再次启动“ eval ”和“ ssh-add〜/ .ssh / id_rsa” 后,它才起作用。
米歇尔·维契安19/12/6

1
经过很长时间的搜索,这才是有效的解决方案
Sujit.Warrier

很好的解释!
avivamg

56

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

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

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


2
谢谢!这正是我所需要的。
2015年

6
不,还是一样。
Jaskey 2015年

3
这些步骤与执行“ eval $(ssh-agent)”相同
K.Nicholas

2
在我的Windows 10上已修复!谢谢!
ntl

1
这实际上帮助我在Linux上保存了该问题...只需替换setexport
greg hor

30

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

之后,我遇到一个我的私钥过于开放的问题,为此设法找到了解决方案(从此处开始):

chgrp Users id_rsa

以及

chmod 600 id_rsa

最终我可以使用:

ssh-agent ssh-add id_rsa

你使用eval `ssh-agent`,用反引号`周围ssh-agent,如在我的答案?在Cygwin中,这对我来说效果很好。您似乎是对的,ssh-agent ssh-add但至少在msysgit Bash中也可以使用。但是,请注意,这id_rsa是使用的默认键,因此您无需使用指定它ssh-agent ssh-add id_rsa

我相信我曾经使用过反引号,但对我来说仍然没有骰子
Vnge 2014年

1
天哪,您解决了我的前几个小时基础。谢谢!
Chee Loong很快

这个答案对我很有效。
Lsakurifaisu

27

为了扩大n3o对于Windows 7的答案...

我的问题确实是未设置某些必需的环境变量,而ssh-agent告诉您如何设置这些环境变量,但实际上并未设置,因此n3o是正确的。

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

使用以下命令将ssh-agent的输出重定向到批处理文件

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起作用所需的环境变量。



Could not open a connection to your authentication agent.在Win10 PowerShell中运行ssh-add时,我仍然可以看到。
Kebman

19

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

附加以下内容-

Host github.com
 IdentityFile ~/.ssh/github_rsa

给我提示的页面设置为Git设置SSH 表示,单空格缩进非常重要...尽管我在这里从Heroku中获得了一个配置,该配置没有该空间并且可以正常工作。


1
这无助于输入SSH密钥的密码。
alesch 2014年

1
如果您不想输入密码,请创建一个不带密码的密钥。无论如何,只要将密码存储在脚本中就没有意义。
Paul Becotte 2014年

这就是使用ssh-agent的重点。密钥的密码存储在安全的密钥链中,由ssh-agent处理。
alesch 2014年

这是我的最佳答案。在Windows 7中数千次启动ssh-agent时会遇到很多问题,而致命陷阱并不能解决问题。我不介意家里的个人计算机上没有密码短语。
Fleshgrinder 2015年

18

如果您遵循这些指示,您的问题将得到解决。

如果您使用的是Mac或Linux计算机,请输入:

eval "$(ssh-agent -s)"

如果您使用的是Windows计算机,请输入:

ssh-agent -s

13

让我提供另一个解决方案。如果您刚刚安装的Git 1.8.2.2点左右,并要启用SSH,跟随良好writen 方向

直到步骤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及以后的步骤。


tyvm让我超越了路障
Jason

我只是想补充一点,在我的案例中,所列项目之一是我们正在执行搜索的grep进程,但是它在执行后已经被杀死。无双关语。
瑞安·莫滕森


12

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

这将运行SSH代理并仅在您第一次需要时进行身份验证,而不是在每次打开Bash终端时进行身份验证。通常,它可以用于使用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 "$@"; }


2
ssh-agent进程似乎与用于运行该进程的终端没有关联。我猜ps -A | grep ssh-agent还是ps h -C ssh-agent应该代替ps | grep ssh-agent
Alexis

1
可能不建议在函数名称中使用连字符。我不知道为什么,但读。例如,我发现echo ssh-auth | bash它将失败。
亚历克西斯2015年

1
您可以简单一点。只需检查它是否正在运行并分配env变量即可。然后向您的ssh config条目中添加AddKeysToAgent yes(或使用prompt)(Host *用于所有主机。)这样,仅当您实际尝试连接时才要求您提供SSH密码,否则可能会要求您输入简单git diff或的密码git status
ST-DDT

2
$HOME/.ssh可能会比/home/$(whoami)/.ssh
Ari Sweedler

12

我遇到了同样的问题,Ubuntu其他解决方案也无济于事。我终于意识到我的问题是什么。我已经ssh/root/.ssh文件夹中创建了密钥,所以即使我ssh-add以root身份运行,它也无法完成工作并继续说

Could not open a connection to your authentication agent.

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

ssh-agent /bin/sh

然后我跑了

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

这样就解决了问题。

注意:要在使用git创建ssh键时添加git密码来访问存储库ssh-keygen -t rsa -C "your git email here"


11

对于Windows用户,我发现cmd eval `ssh-agent -s`无效,但是使用git bash可以解决问题eval `ssh-agent -s`; ssh-add KEY_LOCATION,并确保未禁用Windows服务“ OpenSSH Key Management”


9

连接到服务器时,请使用参数-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.

它是做什么的,为什么?
erikbwork

按照手册页... man ssh ... -A启用转发身份验证代理连接。也可以在配置文件中按主机指定。
Scott Stensland '17

8

运行的基本解决方案有ssh-agent很多答案。但是,运行ssh-agent很多次(每个打开的终端或每个远程登录)将ssh-agent在内存中创建许多副本。建议使用避免这种问题的脚本很长,并且需要编写和/或复制分隔的文件,或者需要在~/.profile或中写入太多字符串~/.schrc。让我提出简单的两个字符串解决方案:

对于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`

这里是什么:

  • ssh-agent按名称和当前用户搜索过程
  • 通过调用创建适当的外壳脚本文件,ssh-agentssh-agent在找不到当前用户ssh-agent进程的情况下自行运行
  • 评估配置适当环境的已创建外壳脚本

不必保护已创建的Shell脚本~/.ssh-agent.tcsh~/.ssh-agent.sh其他用户的访问权限,因为:第一次与之通信ssh-agent是通过受保护的套接字处理的,而该套接字是其他用户无法访问的,而另一方面,其他用户可以ssh-agent通过/tmp/目录中的枚举文件来找到套接字。至于访问ssh-agent过程是一样的。



6

阅读@cupcake的答案以获取解释。在这里,我仅尝试自动化修复程序。

如果将Cygwin终端与BASH一起使用,请将以下内容添加到$ HOME / .bashrc文件中。这仅在第一个Bash终端中启动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”命令中添加正确的密钥。


5

当我启动ssh-agent时,当它已经运行时,我遇到了这个问题。感到困惑。要查看是否是这种情况,请使用

eval $(ssh-agent)

看看这是否与您的预期相同。就我而言,它与我刚开始的那个不同。

要进一步验证您是否正在运行多个ssh代理,可以查看:

ps -ef | grep ssh

2
我认为eval $(ssh-agent)每次运行都应该创建一个具有不同PID的新代理,尽管我可能是错的。

4

当我尝试使其在Windows上通过SSH连接到存储时,我遇到了类似的问题

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

  1. 原来我在Windows框上运行Pageant ssh代理-我会检查您正在运行什么。我怀疑这是Pageant,因为它与Putty和winScp一起默认使用

  2. ssh-add在这种类型的代理程序中无法从命令行运行

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

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

  5. 这就对了。将密钥上传到存储区后,便可以使用SourceTree创建本地存储库并克隆远程服务器。

希望这可以帮助...


3

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


2
我怀疑您需要做的就是杀死所有现有的代理进程,然后重新启动它,而不必重新安装Git。

3

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

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

为什么要输出到/dev/null?你的回答基本上没有完全一样的东西这一项

另外,我想指出这~/.ssh/id_rsa是默认键,因此您不必指定ssh-add ~/.ssh/id_rsa,它ssh-add应该可以工作。

我在相同的环境@Cupcake中尝试了您的解决方案,它不起作用。我也不明白为什么这是答案,但是除非我这样做,否则它永远不会起作用。
nighliber

3

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

在此处输入图片说明


3

这个工作对我来说。

在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

3

对于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

1
我不知道如果您刚才说要致电$(ssh-agent -s)来设置代理的环境,为什么还要粘贴这么多文本。
erikbwork

1
第一次使用时,这对我有用。但是,在系统重新启动后,实际上会使问题变得更糟。使用ssh不工作在所有了。不建议。
yspreen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.