【问题标题】:Error "communication with agent failed" when SSH_AUTH_SOCK is set but SSH_AGENT_PID is not set设置 SSH_AUTH_SOCK 但未设置 SSH_AGENT_PID 时出现错误“与代理通信失败”
【发布时间】:2022-09-25 02:20:04
【问题描述】:

我在 Windows 10 v21H2 上使用 Visual Studio Code v1.67 连接到 Ubuntu Server 22.04 机器。我在 Windows 上运行 SSH 代理 (v8.1)。我在我的 Windows config 文件中设置了 ForwardAgent yes。当我启动一个 Ubuntu 终端时,代理似乎正在 Ubuntu 中运行并且拥有我的 Windows 密钥。我可以通过ssh-add -l 看到它。 SSH_AUTH_SOCK 设置为类似于/run/user/1000/vscode-ssh-auth-sock-12345678(指向/tmp/ssh-XXXXABCDEF/agent.1234 的链接),但未设置SSH_AGENT_PID

如果我尝试ssh -Tvvv git@bitbucket.org,它不会使用代理中的密钥并询问我的 Ubuntu 密钥密码。详细的 SSH 输出中包含以下消息:

debug2: get_agent_identities: ssh_agent_bind_hostkey: communication with agent failed
debug1: get_agent_identities: ssh_fetch_identitylist: communication with agent failed

我可以使用eval `ssh-agent`; ssh-add 在我的 Ubuntu 机器上启动一个新代理并添加密钥。这将同时设置SSH_AUTH_SOCKSSH_AGENT_PIDSSH_AUTH_SOCK 现在有一个类似/tmp/ssh-XXXXXXABCDEF/agent.1234 的路径。现在,当我使用ssh -T git@bitbucket.org 进行测试时,它可以工作了。我不必输入密码。我可以在不输入密码的情况下通过 ssh 对远程设备执行 git push 之类的操作。

我更喜欢使用 VS Code 转发的 Windows 代理密钥。这样我就不用输入密码了。我不明白为什么ssh 无法访问它。这在我从 Ubuntu 21.10 升级到 22.04 之前有效。 openssh 有问题吗?它是 Ubuntu Server 22.04 上的 v8.9。我认为它是美国 21.10 上的 v8.4。还是 VS Code 的问题?问题可能是转发密钥时VS Code没有设置SSH_AGENT_PID吗?使用代理时需要设置SSH_AGENT_PID吗?

编辑:我注意到,如果我只从ssh-agent 设置SSH_AUTH_SOCK,并将SSH_AGENT_PID 留空,然后在我的Ubuntu 机器上添加密钥,它就可以工作(ssh -T git@bitbucket.org 等)。因此,在某些情况下似乎不需要SSH_AGENT_PID。问题可能是 VS Code 转发代理时创建的 SSH_AUTH_SOCK 文件有问题。

帮助表示赞赏。

  • 我还没有解决这个问题。我怀疑这是 Windows 上的 SSH 8.1 和 Linux 上的 8.9 之间的不兼容。显然,OpenSSH 在 v8.9 中引入了一个名为 SSH agent restriction 的东西。这可能是导致我的问题的原因,尽管如果这个新系统应该导致“与代理的通信失败”错误,我会感到惊讶。

标签: ssh-agent


【解决方案1】:

昨天当我试图将我的密钥转发到 VSCode 中的远程服务器时,我也遇到了同样的问题。事实证明,默认安装太旧并且与服务器的协议不兼容。

这是我解决它的方法:

  1. 以提升的权限打开 PowerShell

  2. 使用以下命令卸载默认安装:

    Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    
  3. (可选)如果您看到类似 UninstallPending 而不是 NotPresent 的内容,请重新启动

  4. 检查默认的 OpenSSH 是否完全卸载

    Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
    
  5. 仅安装最新客户端:

    winget install Microsoft.OpenSSH.Beta --override ADDLOCAL=Client
    

    如果没有winget,请关注Install Win32 OpenSSH Using MSI

  6. 检查安装并验证版本 >= 8.9.1.0

    Get-Command ssh-agent
    
  7. (可选)启动ssh-agent服务,如果你

    Start-Service ssh-agent
    Set-Service ssh-agent -StartupType Automatic
    Get-Service ssh-agent
    
  8. (可选)将以下行添加到%USERPROFILE%/.ssh/config

    Host server
      ForwardAgent yes
      AddKeysToAgent yes
    

【讨论】:

    猜你喜欢
    • 2014-09-18
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2019-04-18
    • 2019-04-08
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多