【发布时间】: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_SOCK 和SSH_AGENT_PID。 SSH_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