V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
vone
V2EX  ›  程序员

SSH 私钥设置 passphrase 后, VSCode 的版本控制如何推送代码

  •  
  •   vone · 2022-06-05 18:37:35 +08:00 · 1592 次点击
    这是一个创建于 930 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SSH 私钥设置 passphrase 后,使用 VSCode 的源代码管理功能进行同步代码,会出现下面的提示:

    Snipaste_2022-06-05_18-12-13.jpg

    但是使用终端执行 git push 命令,输入 passphrase 后可以正常推送。

    Snipaste_2022-06-05_18-13-50.jpg

    所以这里推送失败,应该是没有输入 passphrase 。

    请问,怎么设置可以让 VSCode 点击同步更改后,出现输入 passphrase 的对话框。

    类似 IDEA 这样的功能:

    Snipaste_2022-06-05_18-32-52.jpg

    如果无法实现此功能,那是否存在无法实现的具体原因。

    第 1 条附言  ·  2022-06-05 21:20:14 +08:00
    刚去了解了一下 ssh-agent ,Windows 平台的 ssh-agent 目前是把私钥使用 DPAPI 加密后永久性的保存在注册表中,注销登录不会销毁。并且在 issues 中提到不支持 '-c' 和 '-t' 选项:

    > ssh-agent only supports '-l' '-L' 'd' and '-D' options. It ignores '-c' and '-t' options of ssh-add. It persistently and permanently stores the user's private key.

    来源: https://github.com/PowerShell/Win32-OpenSSH/issues/1056


    那这样就会有两个问题:
    1 、同用户运行的其他恶意程序只需要调用 DPAPI 就可以对私钥进行解密
    2 、私钥的 passphrase 相当于无效,因为 ssh-agent 在添加之后永久性保存了私钥,并且不会再次验证 passphrase 。
    (我想要的效果时让我输入 passphrase 或者让我点一下允许之后才能使用私钥,不是跳过 passphrase )
    第 2 条附言  ·  2022-06-05 21:51:41 +08:00
    找到了一个 6 年前的 issues 和 2 年前的 PR ,看来 VSCode 应该是没有这个功能的。
    https://github.com/microsoft/vscode/issues/13680
    https://github.com/microsoft/vscode/pull/94407
    9 条回复    2022-06-08 14:21:04 +08:00
    Kobayashi
        1
    Kobayashi  
       2022-06-05 18:42:42 +08:00 via Android
    ssh agent
    crab
        2
    crab  
       2022-06-05 18:44:27 +08:00
    https://code.visualstudio.com/docs/remote/troubleshooting

    Enabling alternate SSH authentication methods
    vone
        3
    vone  
    OP
       2022-06-05 21:19:21 +08:00   ❤️ 2
    @Kobayashi 刚去了解了一下 ssh-agent ,我看到 Windows 平台的 ssh-agent 目前是把私钥使用 DPAPI 加密后永久性的保存在注册表中,注销登录不会销毁。并且在 issues 中提到不支持 '-c' 和 '-t' 选项:

    > ssh-agent only supports '-l' '-L' 'd' and '-D' options. It ignores '-c' and '-t' options of ssh-add. It persistently and permanently stores the user's private key.

    来源: https://github.com/PowerShell/Win32-OpenSSH/issues/1056


    那这样就会有两个问题:
    1 、同用户运行的其他恶意程序只需要调用 DPAPI 就可以对私钥进行解密
    2 、私钥的 passphrase 相当于无效,因为 ssh-agent 在添加之后永久性保存了私钥,并且不会再次验证 passphrase 。
    (我想要的效果时让我输入 passphrase 或者让我点一下允许之后才能使用私钥,不是跳过 passphrase )
    Buges
        4
    Buges  
       2022-06-05 22:08:57 +08:00 via Android
    记得 Windows 下还有个 putty 自带的 pagent ,应该没有这种问题。
    还有一些其他软件也会提供 ssh-agent 的服务,如 gpg 、keepass 密码管理器等。
    i3x
        5
    i3x  
       2022-06-06 05:46:15 +08:00 via Android
    putty 自带的 agent 就可以了。开机后手动加载私钥,如果私钥有密码就手动输入。。但是也是输入之后除非手动退出软件或者移除才能停止。。。。

    为了安全或者可以考虑用 tpm 模块生成保护一个 8192 位的私钥。这玩意儿原理上根本就导不出,所以盗不走。。。。把这玩意儿随便用。除非本地系统进了转发请求的病毒。清除了或者重装了也就没了。。。。记得加一个更安全的私钥离线存储,万一这个电脑主板坏了。。。。。网上的这种用法的教程很少,我就找到一篇上古的 ubt 的用法。错误,不必要的操作还是蛮多的。。根本不用像那教程说的要编译一些东西。。。官方源都有所有的软件包。
    vone
        6
    vone  
    OP
       2022-06-06 09:52:47 +08:00
    @i3x Windows 平台的 ssh-agent 是永久性保存,重启都不会失效。putty 自带的 agent 也是这样吗?
    i3x
        7
    i3x  
       2022-06-06 10:02:38 +08:00 via Android
    @vone 关机就没,开机重新输入。。。或者手动退掉。。。。。担心被盗就用 tpm 模块干这个。有一些符合国内需要名字称为 tcm txm ,有国密根公钥国密算法,意思是在国家力量前,可以直接解密你的私钥加密,或者可能能冒充你的私钥对文件或信息签名。。。。需要额外的 gpg 之类的保护,如果是敏感的东西,tpm 之类的不能全信。。。算法类的只能说时间会改变一切,但是对你来说现在的机密可能几年后早就用不着了
    qbqbqbqb
        8
    qbqbqbqb  
       2022-06-08 14:13:13 +08:00
    @vone 你说的这个问题只存在于 Win10 自带的 SSH 客户端。以前 Windows 不内置 SSH 客户端的时候,都是使用 git for windows 内置的 ssh (基于 msys2 ),它的用法和 Linux 里的差不多,不存在永久性保存私钥的问题。

    在系统可选功能里卸掉 Windows 自带的 OpenSSH Client ,然后重新安装一遍 git for windows ,以后 VSCode 就会自动使用 git for windows 提供的 ssh 和 ssh-agent 了。(不过这个 ssh-agent 启动有些麻烦,并且使用的时候需要手动设置环境变量或者 ssh 的 IdentityAgent 选项)
    qbqbqbqb
        9
    qbqbqbqb  
       2022-06-08 14:21:04 +08:00
    @vone PuTTY 自带的 agent 也是临时存储,但它用的是 pageant 协议,如果要和 git 一起用的话需要通过一些工具转接。

    这里也需要考虑你的 SSH 客户端是什么版本,Win10 自带的 SSH 客户端无法使用 pageant agent ; git 自带的 SSH 客户端可以通过 git 内置的 ssh-pageant 工具来转接。另外就是安装 git for windows 的时候有一个选项是可以选择使用 PuTTY Plink 作为 ssh 客户端,这样就可以原生支持 pageant agent 了。

    总而言之就是想要避开 Win32-OpenSSH 的 ssh-agent 永久保存私钥的坑点,最好还是卸掉系统自带的 SSH Client ,换用其它的 Windows 平台可用的 SSH 实现。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2666 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:23 · PVG 15:23 · LAX 23:23 · JFK 02:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.