适用于 Linux Ubuntu 的 Windows 子系统:ssh-agent 正在运行,但 ssh-add 抱怨“无法打开与您的身份验证代理的连接”

适用于 Linux Ubuntu 的 Windows 子系统:ssh-agent 正在运行,但 ssh-add 抱怨“无法打开与您的身份验证代理的连接”

当我远离桌面时,我会在笔记本电脑上使用 WSL 和 Ubuntu 在 Linux 上进行开发(使用原生 Linux,我不会遇到任何此类问题)。我设置了私有 git repo,并使用 ssh 连接到它。我已配置 ssh(在.ssh/config),并且我有多个密钥用于我的 VPS、GitHub、其他 VPS 用户帐户等,因此我使用ssh-add桌面上的密钥来管理它们。但是在我的笔记本电脑上,在 WSL 中,当我尝试连接到我的 VPS 时,ssh 会要求输入密钥的密码。当我尝试这样做时,ssh-add .ssh/mykey我收到一个错误:

$ ssh-add .ssh/mykey
Could not open a connection to your authentication agent.

ssh-agent正在运行:

$ ps -e | grep ssh
4455 ?        00:00:00 ssh-agent
5517 ?        00:00:00 sshd
6164 pts/0    00:00:00 ssh

我不明白为什么会出现问题。如果我终止当前正在运行的程序ssh-agent并再次启动它(使用eval $(ssh-agent -s)),它就可以正常工作。

答案1

看起来您正在启动 ssh-agent,但您没有设置指向它的变量。

当你运行它时ssh-agent它会输出类似这样的内容:

SSH_AUTH_SOCK=/tmp/ssh-UfASAcTfsiJm/agent.77; export SSH_AUTH_SOCK; SSH_AGENT_PID=78; export SSH_AGENT_PID;

将其复制为命令并粘贴到 bash,或者只需执行以下命令即可让您的生活更简单:

eval `ssh-agent`

之后变量将被设置并且 ssh-add 将知道如何连接到 ssh-agent。

答案2

问题在于,使用 WSL(截至 2019 年),您可以从 Window 子系统启动多个 shell,它们彼此知道但不继承任何变量。因此,它们不知道 ssh-agent 已在运行。

我设法通过在我的 .bashrc 中添加这段代码来使其工作:

source /tmp/ssh-agent >/dev/null 2>&1
ssh-add 2> /dev/null
if [ $? -ne 0 ]; then
  ssh-agent >/tmp/ssh-agent
  source /tmp/ssh-agent >/dev/null 2>&1
  ssh-add
fi

也许不是最有说服力的代码,但它解决了问题。

2023 年 5 月更新 - 我现在改用这个,可能更干净一些

eval `ssh-agent -s`
ssh-add -t 0 .ssh/id_rsa

相关内容