无法打开与您的身份验证代理的连接
Posted
技术标签:
【中文标题】无法打开与您的身份验证代理的连接【英文标题】:Could not open a connection to your authentication agent 【发布时间】:2011-05-04 05:48:31 【问题描述】:我遇到了这个错误:
$ 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.
【问题讨论】:
问题:一旦你浏览了这个页面上的每一个答案,它们都不起作用。下一步你能做什么? @BrandonBertelsen 试试这个:$ ssh-agent /bin/sh
和 $ ssh-add $yourkey
@BrandonBertelsen 接下来你应该使用git config --list
来查看你是否设置了credential.helper
- 如果你有你应该删除这个设置,因为助手没有帮助。
另见unix.stackexchange.com/a/48868
【参考方案1】:
你开始ssh-agent
了吗?
您可能需要在运行ssh-add
命令之前启动ssh-agent
:
eval `ssh-agent -s`
ssh-add
请注意,这将启动 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
?
要找出原因,请参阅this comment。
公钥与私钥
另外,每当我使用ssh-add
时,我总是会向它添加私钥。文件~/.ssh/id_rsa.pub
看起来像一个公钥,我不确定这是否可行。你有~/.ssh/id_rsa
文件吗?如果你在文本编辑器中打开它,它会说它是一个私钥吗?
【讨论】:
@xtian 我不确定我是否理解这个问题。我不知道确切的细节,但我猜私钥永远不会通过网络发送。我认为ssh-add
只是解密主机上的加密私钥,以便可以在本地使用它......它从未发送给任何人。我猜只有公钥是通过网络发送的。我的理解有误吗?
你太客气了纸杯蛋糕。你是绝对正确的。我的错。 ex here; ssh-add 为用户的 ssh-agent(运行进程)添加私钥,可以代表客户端/主机执行操作,服务器接受 rsa-whatever 密钥。哎呀。我不知道是什么让我如此兴奋。
我很好奇为什么 eval ssh-agent -s
有效,但 ssh-agent
本身却无效。
@DanielM:SSH 需要两件东西才能使用 ssh-agent:一个在后台运行的 ssh-agent 实例,以及一个告诉 SSH 它应该使用哪个套接字连接到代理(SSH_AUTH_SOCK
IIRC)。如果您只是运行ssh-agent
,那么代理将启动,但 SSH 将不知道在哪里找到它。
感谢您的回复。我刚刚注意到您在命令中使用了反引号。我很困惑为什么反引号(`)适用于 eval 命令而不是单/双引号(',“)在我的 bash shell 上?【参考方案2】:
我尝试了其他解决方案无济于事。我进行了更多研究,发现以下命令有效。我使用的是 Windows 7 和 Git Bash。
eval $(ssh-agent)
更多信息在:https://coderwall.com/p/rdi_wq
【讨论】:
也适用于 Windows 8。 太棒了!!也适用于 Windows 10。 在 Manjaro 上工作 $ eval "$(ssh-agent -s)" 在 Windows 10 上为我工作 谢谢你,工作就像一个魅力!根据您使用的控制台,它可能不知道使用哪个套接字连接到 ssh 代理服务,eval 似乎通过为该控制台设置环境变量来为您解决这个问题,至少我是如何理解的【参考方案3】:以下命令对我有用。我正在使用 CentOS。
exec ssh-agent bash
【讨论】:
谢谢,这对我有用,我为我的 shell 运行了 'exec ssh-agent zsh'。 根据this deleted "answer",它也适用于 Amazon Linux AMI。我猜这是一个 Unix/Linux/*nix 解决方案。 我 ssh 进入了一个 docker 容器,ssh-add my.id_rsa
对我来说会失败。但是exec ssh-agent zsh
提供了一个我可以ssh-add
毫无问题的环境。我在我的码头集装箱里:)
谁能简要解释一下问题可能是什么?谢谢 :) 这也适用于我的 Ubuntu 14.04。
我做了同样的事情,但exec ssh-agent fish
。其他解决方案都不适合我。这应该是公认的答案。我无法在 Raspbian buster 上添加我的身份。【参考方案4】:
无法打开与您的身份验证代理的连接
要解决此错误:
重击:
$ eval `ssh-agent -s`
tcsh:
$ eval `ssh-agent -c`
然后像往常一样使用ssh-add
。
热点提示:
我总是忘记为上述 ssh-agent 命令键入什么内容,因此我在 .bashrc
文件中创建了一个别名,如下所示:
alias ssh-agent-cyg='eval `ssh-agent -s`'
现在我可以使用ssh-agent-cyg
而不是ssh-agent
例如
$ 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
【讨论】:
每次您之前运行过ssh-agent
时都需要运行eval
命令。我现在使用别名,请参阅更新后的答案了解我是如何做到这一点的。
仅供参考:从***.com/questions/4083079/…合并
我还需要使用 ssh 规范而不是 https(参见 help.github.com/articles/changing-a-remote-s-url)
你先生,你真棒。谢谢。 ** 我在克隆 bitbucket 存储库时遇到了同样的问题,我已经设置了一个 ssh 密钥,但一直出错:fatal: Could not read from remote repository.
。
在 Windows 10 上为我工作并安装了 git bash【参考方案5】:
MsysGit 或 Cygwin
如果您使用的是 Msysgit 或 Cygwin,您可以在 SSH-Agent in msysgit and cygwin and bash 找到一个很好的教程:
将名为 .bashrc
的文件添加到您的主文件夹。
打开文件并粘贴:
#!/bin/bash
eval `ssh-agent -s`
ssh-add
这假定您的密钥位于传统的~/.ssh/id_rsa
位置。如果不是,请在 ssh-add
命令后包含完整路径。
使用内容添加或创建文件~/.ssh/config
ForwardAgent yes
在原始教程中,ForwardAgent
参数是 Yes
,但这是一个错字。全部使用小写,否则会出错。
重新启动 Msysgit。它会要求您输入一次密码,仅此而已(直到您结束会话,或者您的 ssh-agent 被终止。)
Mac/OS X
如果您不想在每次打开终端时都启动新的 ssh-agent,请查看 Keychain。我现在在 Mac 上,所以我使用教程 ssh-agent with zsh & keychain on Mac OS X 进行设置,但我确信 Google 搜索会提供大量适用于 Windows 的信息。
更新:在 Mac 上更好的解决方案是将您的密钥添加到 Mac OS 钥匙串:
ssh-add -K ~/.ssh/id_rsa
就这么简单。
【讨论】:
仅供参考:从***.com/questions/4083079/…合并 当我执行eval `ssh-agent -s`
时,当我退出 cygwin 时进程不会停止。
有没有办法为 Windows / gitbash 设置配置,这样你就不必每次都这样做?
应该是ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)
- 否则每次都会启动一个新的ssh-agent。当用户有 cronjobs 时,不时杀死我的机器。
ForwardAgent yes
不是必需的,如果为任何不受信任的服务器设置,则为 nontheoretical security risk。无论此设置如何,对您的密钥代理的本地访问都应该起作用。【参考方案6】:
运行
ssh-agent bash
ssh-add
要了解更多详情,您可以搜索
ssh-agent
或运行
man ssh-agent
【讨论】:
我建议如果你在 windows 上使用 git bash 那就试试这个。 @neer17 这让我可以在 ubuntu 上使用ssh-copy-id
。不确定为什么不使用 ssh-agent
启动 bash 就无法添加密钥。
这是适用于 Windows 的! (在 W10pro build 1809 和 git 2.21.0 上测试)
我正在使用 ZSH,这对我有用:ssh-agent zsh; ssh-add
我的 Cygwin 和 Git Bash 工作正常,但由于某种原因,从 Fork 客户端打开的控制台无法正常工作,这修复了它。我将来可能只会使用 Git Bash,但至少我现在知道如何让它工作 :)【参考方案7】:
ssh-add 和 ssh(假设您使用的是 openssh 实现)需要一个环境变量来知道如何与 ssh 代理通信。如果您在与您现在使用的不同的命令提示符窗口中启动代理,或者如果您启动不正确,则 ssh-add 和 ssh 都不会看到该环境变量集(因为环境变量是在本地设置的 到它设置的命令提示符)。
你没有说你使用的是哪个版本的 ssh,但如果你使用的是 cygwin 的,你可以使用来自SSH Agent on Cygwin 的这个配方:
# 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
这将为您打开的每个新命令提示符窗口自动启动一个代理(如果您在一个会话中打开多个命令提示符,这是次优的,但至少它应该可以工作)。
【讨论】:
仅供参考:从***.com/questions/4083079/…合并 我是从另一个 SO 问题链接到这里的。我能问一下为什么有必要将它添加到 Bash 配置文件中吗?在我的机器上,我需要做的就是运行eval $(ssh-agent)
,然后我可以为每个新的终端窗口使用无密码 ssh。
这应该是不可能的,除非你从那个终端启动新的终端。
你能概括一下这段代码的作用吗?自己没有得到答案的人(比如我)不会知道这实际上是做什么的。
@shuhalo 我在代码下面写下了它的作用。【参考方案8】:
我在 Linux 上遇到了同样的问题,这就是我所做的:
基本上,命令 ssh-agent 启动代理,但它并没有真正设置环境变量以使其运行。它只是将这些变量输出到 shell。
你需要:
eval `ssh-agent`
然后执行 ssh-add。请参阅Could not open a connection to your authentication agent。
【讨论】:
仅供参考:从***.com/questions/4083079/…合并 在 Windows 上使用 boot2docker 时遇到问题时也为我工作。 这就是我所需要的。【参考方案9】:我没有使用$ 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 <pids>
启动 ssh 代理$ eval `ssh-agent -s`
将步骤 2 中生成的 ssh 密钥添加到 ssh 代理$ ssh-add ~/.ssh/id_rsa
【讨论】:
'eval' 不是内部或外部命令、可运行程序或批处理文件。 您可以通过 evalssh-agent -s
重新启动代理并使用 ssh-add ~/.ssh/id_rsa 添加旧密钥。如果您生成新的 SSH 密钥,那么您将需要在所有服务(例如 github、bitbucket 等)中更新该密钥。
有没有办法让它在 Windows 重新启动后仍然存在?重新启动后它不起作用,直到我再次启动“eval ssh-agent -s
”和“ssh-add ~/.ssh/id_rsa”。
找了半天,这就是解决办法【参考方案10】:
尝试以下步骤:
1) 打开 Git Bash 并运行:cd ~/.ssh
2) 尝试运行代理:eval $(ssh-agent)
3) 现在,您可以运行以下命令:ssh-add -l
【讨论】:
这是唯一对我有用的解决方案(在 Windows 7 上)。首先,我在 Rick 的回答中使用了ps aux | grep ssh
和 kill
命令来杀死特工。之后ssh-add
在没有 -l 开关的情况下工作(使用 -l 会出错)。 eval 'ssh-agent'
在 Rick 的回答中不起作用,我不得不在 Chechoro 的回答中使用 eval $(ssh-agent)
。
+1 我遇到了与 OP (Windows 7) 完全相同的问题,这是唯一对我有用的解决方案。
仅供参考:从***.com/questions/4083079/…合并
@Frug 是反引号,不是撇号;在 shell 脚本中,这意味着执行其中包含的内容。 $(ssh-agent)
等价于 `ssh-agent`
但更具可读性。【参考方案11】:
在 Windows 10 中,我尝试了此处列出的所有答案,但似乎都不起作用。事实上,他们提供了线索。要简单地解决问题,您需要 3 个命令。 这个问题的思路是 ssh-add 需要 SSH_AUTH_SOCK 和 SSH_AGENT_PID 环境变量设置为当前的 ssh-agent sock 文件路径和 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 代理失败。
【讨论】:
谢谢!这正是我所需要的。 这些步骤与执行 'eval $(ssh-agent)' 相同 已在我的 Windows 10 上修复!谢谢! 感谢您准确解释发生了什么,而不是仅仅在答案中抛出 bash 命令。 这实际上帮助我在 Linux 上解决了这个问题...只需将set
替换为 export
【参考方案12】:
我遇到的一件事是 eval
对我使用 Cygwin 不起作用,对我有用的是 ssh-agent ssh-add id_rsa
。
之后我遇到了我的私钥太开放的问题,我设法找到了解决方案(来自here):
chgrp Users id_rsa
还有
chmod 600 id_rsa
终于可以使用了:
ssh-agent ssh-add id_rsa
【讨论】:
您是否使用了eval `ssh-agent`
,在ssh-agent
周围加上反引号`
,如my answer 所示?这对我来说在 Cygwin 中工作得很好。你似乎是对的,ssh-agent ssh-add
也可以工作,至少在 msysgit Bash 中是这样。但是,请注意 id_rsa
是使用的默认密钥,因此您无需使用 ssh-agent ssh-add id_rsa
指定它。
我相信我已经使用了反引号,但对我来说仍然没有骰子
天哪,你解决了我几个小时的挫败感。谢谢!【参考方案13】:
对于 windows 用户,我发现 cmd eval `ssh-agent -s`
不起作用,但使用 git bash 可以解决问题 eval `ssh-agent -s`; ssh-add KEY_LOCATION
,并确保 windows 服务“OpenSSH 密钥管理”没有被禁用
【讨论】:
【参考方案14】:放大 n3o 对 Windows 7 的回答...
我的问题确实是一些必需的环境变量没有设置,n3o 是正确的,ssh-agent 告诉你如何设置这些环境变量,但实际上并没有设置它们。
由于 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 工作所需的环境变量。
【讨论】:
仅供参考:从***.com/questions/4083079/…合并 在 Win10 PowerShell 中运行 ssh-add 时仍然得到Could not open a connection to your authentication agent.
。【参考方案15】:
我刚刚开始工作。打开你的~/.ssh/config
文件。
添加以下内容-
Host github.com
IdentityFile ~/.ssh/github_rsa
给我提示的页面Set up SSH for Git 说单个空格缩进很重要......虽然我在这里有一个来自 Heroku 的配置,它没有那个空间并且可以正常工作。
【讨论】:
这无助于输入 SSH 密钥的密码。 如果您不想输入密码,请创建一个没有密码的密钥。如果您只是要将密码存储在脚本中,那么使用密码是没有意义的。 这就是使用 ssh-agent 的全部意义所在。密钥的密码存储在一个安全的钥匙串中,由 ssh-agent 处理。 这对我来说是最好的答案。在 Windows 7 中启动数千次的 ssh-agent 有很多问题,而杀戮陷阱并没有解决问题。我不介意在家里的个人电脑上没有密码。【参考方案16】:如果您按照这些说明进行操作,您的问题就会得到解决。
如果您使用的是 Mac 或 Linux 机器,请输入:
eval "$(ssh-agent -s)"
如果您使用的是 Windows 计算机,请键入:
ssh-agent -s
【讨论】:
【参考方案17】:我在Ubuntu
上遇到了同样的问题,而其他解决方案对我没有帮助。
我终于意识到我的问题是什么。我在/root/.ssh
文件夹中创建了我的ssh
密钥,所以即使我以root 身份运行ssh-add
,它也无法完成工作并一直说
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-keygen -t rsa -C "your git email here"
创建 ssh
密钥时添加您的 git 密码。
【讨论】:
【参考方案18】:让我提供另一种解决方案。如果你刚刚安装了 Git 1.8.2.2 或更高版本,并且想要启用 SSH,请关注写得很好的directions。
从步骤 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 只是想补充一点,在我的例子中,列出的项目之一是我们正在使用的 grep 进程进行搜索,但它在执行后已经被杀死。没有双关语。 仅供参考:从***.com/questions/4083079/…合并【参考方案19】:注意:这是对this question 的回复,已与此回复合并。 这个问题是针对 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 "$@";
【讨论】:
仅供参考:从***.com/questions/4083079/…合并 ssh-agent 进程似乎与运行它的终端没有关联。我猜应该使用ps -A | grep ssh-agent
或ps h -C ssh-agent
而不是ps | grep ssh-agent
可能不建议在函数名中使用连字符。我不知道为什么,但请阅读this。例如,我发现echo ssh-auth | bash
会失败。
你可以简单一点。只需检查它是否正在运行并分配环境变量。然后将AddKeysToAgent yes
(或使用prompt
)添加到您的ssh 配置条目(对所有主机使用Host *
。)这样,只有在您实际尝试连接时才会要求您输入SSH 密码,否则可能会询问您获取简单的git diff
或git status
的密码。
$HOME/.ssh
可能比/home/$(whoami)/.ssh
更健壮【参考方案20】:
运行ssh-agent
的基本解决方案在许多答案中得到了解答。然而,多次运行ssh-agent
(每个打开的终端或每个远程登录)将创建许多在内存中运行的ssh-agent
副本。建议避免该问题的脚本很长,需要编写和/或复制分隔文件或需要在~/.profile
或~/.schrc
中编写太多字符串。让我建议简单的两个字符串解决方案:
对于 sh、bash 等:
# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh
对于 csh、tcsh 等:
# ~/.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-agent
进程,则通过调用ssh-agent
创建适当的shell 脚本文件并运行ssh-agent
本身
评估创建的配置适当环境的 shell 脚本
没有必要保护创建的 shell 脚本 ~/.ssh-agent.tcsh
或 ~/.ssh-agent.sh
不被其他用户访问,因为:与 ssh-agent
的第一次通信是通过其他用户无法访问的受保护套接字处理的,并且在第二次其他用户可以通过/tmp/
目录中的枚举文件找到ssh-agent
socket simple。至于访问ssh-agent
进程是一样的。
【讨论】:
【参考方案21】:在 Windows 10 中,使用 命令提示符 终端,以下内容适用于我:
ssh-agent cmd
ssh-add
之后应该会要求您输入密码:
Enter passphrase for /c/Users/username/.ssh/id_rsa:
【讨论】:
对于非 Windows 用户:ssh-agent bash
或 ssh-agent zsh
可能是解决方案。
谢谢,生活在 Windows 中确实令人沮丧。【参考方案22】:
尝试以下方法:
ssh-agent sh -c 'ssh-add && git push heroku master'
【讨论】:
看起来很干净。【参考方案23】:连接服务器时使用参数-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.
【讨论】:
它有什么作用,为什么? 根据手册页 ... man ssh ... -A 启用身份验证代理连接的转发。这也可以在配置文件中针对每个主机指定。【参考方案24】:我在启动 ssh-agent 时遇到了这个问题,当时它已经在运行。变得困惑。要查看是否是这种情况,请使用
eval $(ssh-agent)
看看这是否与您认为的一样。就我而言,它与我刚开始的不同。
要进一步验证您是否运行了多个 ssh-agent,您可以查看:
ps -ef | grep ssh
【讨论】:
我认为运行eval $(ssh-agent)
应该每次都创建一个具有不同 PID 的新代理,尽管我可能错了。【参考方案25】:
阅读@cupcake's answer 以获取解释。这里我只尝试自动化修复。
如果您使用带有 BASH 的 Cygwin 终端,请将以下内容添加到 $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”命令中添加正确的密钥。
【讨论】:
【参考方案26】:您必须在添加之前运行此命令:
eval `ssh-agent -s`
那么你必须这样执行命令:
ssh-add ~/.ssh/id_rsa
【讨论】:
【参考方案27】:在Win8.1E上使用Git Bash,我的解决方法如下:
eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa
【讨论】:
为什么要输出到/dev/null
?您的回答基本上与this one 完全相同。
另外,我想指出 ~/.ssh/id_rsa
是默认键,因此您不必指定 ssh-add ~/.ssh/id_rsa
,只需 ssh-add
即可。
我在同一环境中尝试了您的解决方案@Cupcake,它不起作用。我也不明白为什么这是答案,但除非我这样做,否则它永远不会奏效。
@user456814 > /dev/null
被广泛使用,例如***.com/questions/17846529/…。我想这不是真的必要。 The output redirect just gets rid of the printed "Agent pid blah blah".
,见blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add。【参考方案28】:
当我试图让它在 Windows 上工作以通过 ssh 连接到存储时遇到了类似的问题
这是对我有用的解决方案。
原来我在我的 Windows 机器上运行了 Pageant ssh 代理 - 我会检查你在运行什么。我怀疑它是 Pageant,因为它是 Putty 和 winScp 的默认设置
ssh-add 不能从命令行使用这种类型的代理工作
您需要通过选美 UI 窗口添加私钥,您可以通过双击任务栏中的选美图标(一旦启动)来获得。
在将密钥添加到 Pageant 之前,您需要将其转换为 PPK 格式。完整的说明在这里How to convert SSH key to ppk format
就是这样。将密钥上传到 stash 后,我就可以使用 SourceTree 创建本地仓库并克隆远程仓库。
希望这会有所帮助...
【讨论】:
【参考方案29】:对于 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
【讨论】:
我不知道你为什么要粘贴这么多文字,如果你可以说打电话给$(ssh-agent -s)
来设置代理的环境。
当我第一次使用它时,这对我有用。但是在系统重新启动后,它实际上导致问题变得更糟。随着 ssh 不再工作根本。不推荐。【参考方案30】:
我通过强制停止(杀死)git 进程(ssh 代理),然后卸载 Git,然后再次安装 Git 解决了该错误。
【讨论】:
我怀疑您需要做的只是杀死所有现有的代理进程,然后重新启动一个,而不必重新安装 Git。以上是关于无法打开与您的身份验证代理的连接的主要内容,如果未能解决你的问题,请参考以下文章
无法打开与您的身份验证代理的连接 opensuse 13.2
“无法打开与您的身份验证代理的连接”,即使在 ssh-agent 启动后,ssh-add 也会出错
使用Charles代理工具导致电脑无法正常访问网站(您的连接不是私密连接)