我正在尝试让Remote-SSH与ssh-agent一起工作,从Windows 7桌面到CentOS 7服务器。
我正在使用 Git for Windows 包中的 ssh、ssh-add 和 ssh-agent。 从cmd提示符下,这一切都工作正常,我可以"ssh-add -l"并查看键,我可以运行"ssh",它运行没有问题,也不要求输入密码:
C:Usersgnb>"c:Program FilesGitusrbinssh-add.exe" -l
4096 SHA256:zg2IR6OlPwCGP8SzcbriXIQjth5zuDc9rbO6uaNPmcU gnb@VDI028-MEL (RSA)
C:Usersgnb>ssh vdi ls
Desktop
tsclient
wkspace
C:Usersgnb>
在VS代码中,我无法使其工作。 从VS代码终端中运行完全相同的ssh-add命令似乎找不到代理:
C:Usersgnb>"c:Program FilesGitusrbinssh-add.exe" -l
Could not open a connection to your authentication agent.
VS-Code 中的实际远程功能或多或少有效,但不断停下来询问密码。
这里缺少什么? 为什么 vs-code 环境无法连接到 ssh 代理?
好的,我又玩了几个小时,我想我明白发生了什么。
仅当它与用于启动代理的 cmd 窗口相同时,它才从 cmd 工作。 打开一个新的cmd窗口,然后ssh从菜单中获得与启动vs代码相同的msg - 找不到代理。 看起来 Win7 上的 git/ssh 附带的 start-ssh-agent 脚本正在设置一些环境变量或 ssh 客户端需要的一些变量。 这确实是有道理的,Unix ssh-agent的行为方式相同,但我显然不习惯用这些术语来考虑Windows应用程序。
似乎启动 ssg-agent 脚本会将环境变量设置为指向现有代理(如果正在运行),否则将创建一个新代理。 所以一个 2 行批处理文件
start-ssh-agent
code
将使用 ssh 代理可靠地启动 VS 代码。 如果您在 ssh 配置中命名标识文件,vs-code 会在需要时将它们密钥添加到代理中。 否则,您需要手动将密钥添加到代理,或者回退到始终输入密码。
怀疑更好的解决方案是在Win10上使用ssh代理作为服务,这应该意味着VS代码在从菜单运行时应该找到代理。 但我无法测试这一点。