ssh-agent - Remote-SSH 找不到代理
问题描述
我正在尝试让 Remote-SSH 与 ssh-agent 一起工作,从 Windows 7 桌面到 CentOs 7 服务器。
我正在使用 Git for windows 包中的 ssh、ssh-add 和 ssh-agent。在 cmd 提示符下,一切正常,我可以“ssh-add -l”并查看密钥,并且可以运行“ssh”,它运行没有问题,无需输入密码:
C:\Users\gnb>"c:\Program Files\Git\usr\bin\ssh-add.exe" -l
4096 SHA256:zg2IR6OlPwCGP8SzcbriXIQjth5zuDc9rbO6uaNPmcU gnb@VDI028-MEL (RSA)
C:\Users\gnb>ssh vdi ls
Desktop
tsclient
wkspace
C:\Users\gnb>
在 VS-Code 中,我无法让它工作。在 VS-Code 终端中运行完全相同的 ssh-add 命令似乎找不到代理:
C:\Users\gnb>"c:\Program Files\Git\usr\bin\ssh-add.exe" -l
Could not open a connection to your authentication agent.
VS-Code 中的实际远程功能或多或少是有效的,但会不停地询问密码。
这里缺少什么?为什么 vs-code 环境连接不上 ssh-agent?
解决方案
好的,我又玩了几个小时,我想我明白发生了什么。
如果它与用于启动代理的 cmd 窗口相同,则它仅适用于 cmd。打开一个新的 cmd 窗口,然后 ssh 得到与从菜单启动 vs-code 相同的消息 - 找不到代理。似乎 Win7 上 git/ssh 附带的 start-ssh-agent 脚本正在设置一些环境变量或一些 ssh 客户端需要的环境变量。这确实有道理,Unix ssh-agent 的行为方式相同,但我显然不习惯用这些术语来考虑 Windows 应用程序。
似乎 start-ssg-agent 脚本会将环境变量设置为指向现有代理(如果正在运行),否则将创建一个新代理。所以一个2行批处理文件
start-ssh-agent
code
将使用 ssh-agent 可靠地启动 VS Code。如果您在 ssh 配置中命名身份文件,vs-code 将在需要时将它们的密钥添加到代理。否则您需要手动将密钥添加到代理,或者一直回退到输入密码。
怀疑更好的解决方案是在 Win10 上并使用 ssh-agent 作为服务,这应该意味着 VS-code 在从菜单运行时应该找到代理。但我无法测试。
推荐阅读
- angular - 如何将正文中的两个表分成xml中的两个不同的工作表?
- flutter - 解析 LocalFile 时出错:'E:\android\app\src\main\AndroidManifest.xml' 请确保 android 清单是有效的 XML 文档,然后重试
- crystal-reports - Crystal Reports - 在子报表之间传递变量
- c++ - 程序在 QT opencv 中意外完成
- c# - System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务):HRESULT:0x80640012
- ionic-framework - ionic cordova build android --verbose 被 ember-cli 失败
- angular-reactive-forms - ERROR 错误:没有名称的表单控件的值访问器:
- ldap - LDAP 限制对特定 OU 的用户搜索
- oracle-apex - Oracle APEX - 使用特定 LOV 查找所有页面
- node.js - “致命:没有 pg_hba.conf 条目”来自 postgres 的错误,在 Heroku 上的节点中使用 db-migrate