Vscode: Git:使用私钥密码支持git

创建于 2016-10-13  ·  229评论  ·  资料来源: microsoft/vscode

  • VSCode版本:1.6.0
  • 提交e52fb0bc87e6f5c8f144e172639891d8d8c9aa55
  • 日期2016-10-10T18:37:40.189Z
  • 外壳1.3.7
  • 渲染器52.0.2743.82
  • 节点6.5.0
  • 操作系统版本:Windows 7 Pro

重现步骤:

  1. 创建具有密码保护的公私钥对
  2. 将它们添加到您的github帐户
  3. 设置git以使用私钥文件
  4. 尝试用git推送东西

结果:

git pull
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
feature-request git help wanted

最有用的评论

Windows 10的解决方法:

  1. 使Git使用Windows随附的OpenSSH,而不是Git随附的OpenSSH。
    git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
  2. 将ssh-agent服务(不是git随附的服务)设置为自动运行。
    打开任务管理器的“服务”选项卡,单击“打开服务”。
    查找OpenSSH身份验证代理,打开属性,将“启动类型”设置为“自动”,然后单击“确定”。
    另外,启动服务或重新启动计算机。
  3. 将受密码保护的密钥添加到代理。
    ssh-add
    它应该自动选择存储在C:\ Users \%USERNAME%\。ssh中的密钥,这是ssh-keygen创建它们的地方。
    在提示符下输入您的密码。

注意:如果在安装Windows版Git时,选择了将bash命令添加到PATH的选项,则ssh-add命令可能指向错误的可执行文件。 如果是这样,您可以手动运行附带的密钥将密钥添加到代理中:
C:\Windows\System32\OpenSSH\ssh-add.exe

现在,内置的OpenSSH身份验证代理将在启动时运行,并且您的密码保护密钥已解锁,并且Git将使用Windows OpenSSH而不是它自己的。 因此,无需每次都输入密码,无需手动启动ssh代理,也无需从命令行启动VS Code。

所有229条评论

它可以从命令行运行吗? 您如何精确设置git以使用私钥文件?

它从命令行运行。 实际上,我是通过乌龟git设置git的-所以我想一切都正确完成了。

image

您如何启动命令行? 哪个命令行?

我在Windows上使用git bash(MINGW64)。

对。 因此,我们可能还必须添加git.sshkey设置,例如Tortoise。

对于Windows 10,Git 2.10.1。

在生产服务器上的vscode上使用git时出现问题,因此我创建了一个测试服务器。
首先,使用受密码保护的用户(无密钥)时,会出现相同的错误-不会弹出凭据提示或其他任何内容。
使用vscode或任何我可以推,拉的随机cmd中的终端,它可以工作-要求输入密码。 使用vscode我只能准备提交。 拉,推,同步都失败,因为他们不要求输入密码。

在生产环境中,我使用带有不同5位数字端口的SSH的密码保护密钥。
我在一台机器上还有几个不同的ssh密钥(包括git)...

@joaomoreno为什么将其移至待办事项列表?

只是计划优先事项。 您可以尝试拉取请求。 👍

等待中😉

这事有进一步更新吗? 我遇到同样的问题,这很烦人😞

@joaomoreno我正在为此刺。 当我最近转向基于密钥的安全性时,它现在对我个人有影响。

人们可以在这里跟踪我的进度。

@hashhar太棒了! 🍻让我知道你是否撞墙了。

@joaomoreno我正在调查需要更改的地方,发现以下内容:

当前方案:

  • 如果您运行的ssh代理已添加了密钥,则可以执行除clone之外的所有操作(因为node.url.parse()不适用于ssh url)。
  • 如果ssh-agent没有运行,则所有涉及网络活动(获取,克隆,推送,拉入)的git命令都会失败。 该错误是由git.exe生成的。

拟议变更:

  • [x]不需要,请参阅下一条
  • [x]添加一个配置密钥, git.sshkey (私钥的位置(目前仅限于openssh密钥-因为git本身支持这些密钥,以后将研究腻子密钥))。
  • []添加一个条件,在其中初始化git扩展以启动SSH代理(如果未运行)并添加密钥。 需要以某种方式(快速选择?)要求用户输入密码。 (我们在关闭vscode时会杀死代理吗?

不需要其他更改(根据我目前的观察),因为与git端点的通信是由git.exe处理的,而不是由vscode处理的。

好的,我对URL解析很不好。 似乎节点接受git+ssh://[email protected]:hashhar/vscodessh://[email protected]:hashhar/vscode类的网址,但必须明确提及ssh部分。

我应该怎么做,vscode应该神奇地在[email protected]:username/repo格式的网址之前加上ssh 。 还是默默地失败? (尽管这仍然需要ssh-agent运行)。

平@joaomoreno。 如果您有时间,请对我遇到的上述问题发表评论。 我目前已通过针对私钥启动ssh-agent来整理概念证明。 它可以工作,但仍需要一些抛光。

@hashhar抱歉,延迟...目前我实际上很忙。 随时创建PR,并将讨论移到那里,我们将尽力在3月进行讨论。

仅启动ssh-agent是不够的,还需要添加环境变量SSH_AGENT_PID和SSH_AUTH_SOCK,以便Git知道在哪里查看。

然后,您需要将其存储在某个地方,以便可以在VSCode重新启动之间使用它,或者您每次重新启动VS Code时都需要重新启动ssh-agent。

如果可以与Posh-Git(Powershell Git模块)共享它,那将很可爱,后者将值存储在([System.IO.Path]::GetTempPath()) ".ssh\$key.env" -但可能值得与该团队讨论以确保该位置是他们所需要的东西很高兴被锁定。

@andrewducker非常感谢您的额外投入。 由于我的中期成绩,我一直没有按照自己想要的速度进行这项工作。 我将在本周末结束。 我会让Posh-Git小组知道。

@joaomoreno我已经回到工作上。 我以前的方法太幼稚,没有用。 我目前正在尝试找到合适的位置来添加执行任何git命令之前调用的函数(即VSCode启动且git提供程序正在加载时)。 我在哪里做? 我似乎无法理解什么是代码流。

每当进行Git调用时,都会有一段代码被调用吗? 如果是这样,那么您可以在首次调用时要求输入密码。

看着它,将钩子插入Git.ts便是解决所有功能的方法,这意味着连接到服务器。 (如抓取,拉动,推动等)。

(我愿意自己做,但是我从来没有用TypeScript编写任何东西,也没有使用VSCode扩展,所以这只是基于我简要地研究了GitHub上的代码。)

最大的问题是,在Windows上,取决于ssh-agent的启动方式,SSH_AUTH_SOCK和SSH_AUTH_PID变量可能对所有进程可用,或者仅对单个控制台会话可用。 因此,从VSCode中启动ssh-agent而不是重用现有的代理(至少在Windows上)要容易得多。

实际上,这意味着用户必须在完成第一个Git操作之前提供其口令短语ONCE。 如果我们可以定义将在其中创建SSH_AUTH_SOCK的硬编码位置,以便其他VSCode实例可以在启动自己的代理之前对其进行查看,则VSCode实例可以在它们之间共享ssh-agent。

事实证明,这对我来说是一个非常有趣的挑战。 😃

如果vscode可以接受已经存在的SSH_AUTH_SOCK,这也是一个可行的选择。 即使ssh-agent已在我的系统上运行,我仍被要求输入私钥密码。 有趣的是,我可以在集成的vscode终端(shell)中使用git。 git插件和终端的行为应相同,以便于调试。

编辑:我正在提交f9d0c687ff2ea7aabd85fb9a43129117c0ecf519
EDIT2:当我从bash运行vscode而不是使用窗口管理器的启动器时,它可以工作。

是的-从已经在环境中设置了它们的会话中启动VSCode可以正常工作(在我的情况下是从Powershell启动)。 因此,如果已经设置好它们,则无事可做。

有什么进展吗?

@ezamelczyk不。 对不起。 由于大学的缘故,我无法投入足够的时间。 谢谢你提醒我。 下周我将努力完成一些工作。

嗨,大家好,

可悲的是我遇到同样的问题...😭
这是我的配置以及重现它的详细方案。
希望对您有所帮助!

操作系统:macOSX Sierra版本10.24.4
VScode :版本1.11.1

在我的.ssh文件夹中,我有那些文件:

  • 配置
  • id_rsa_github
  • id_rsa_github.pub
  • id_rsa_gitlab
  • id_rsa_gitlab.pub
  • 知道主机

配置文件内容:

Host gitlab.com
  HostName gitlab.com
  User git
  RSAAuthentication yes
  IdentityFile ~/.ssh/id_rsa_gitlab

Host github.com
  HostName github.com
  User git
  RSAAuthentication yes
  IdentityFile ~/.ssh/id_rsa_github

我可以从命令行和塔中进行提交和推送而没有任何问题。
但是我无法使用VScode ...每次尝试时,它都会向我返回此输出消息:

git pull
权限被拒绝(公钥)。
致命:无法从远程存储库读取。
请确保您具有正确的访问权限
并且存储库存在。

谢谢你的帮助

对我来说,这确实是一个障碍。 我喜欢VSC,但是没有使用git的能力,就不能将其用作日常编辑器。

@MartinZubek @jmbelloteau是否从启动SSH代理的命令行启动它来为您修复它?

@andrewducker

从终端,我已使用以下命令连接到远程Git:

ssh -T [email protected]

...然后我使用以下命令从终端打开VScode:

code

当我从VScode推送时,我仍然遇到相同的错误...
那真是个问题!

@MartinZubek同样在这里,VScode很棒,比Atom还要多。
我喜欢UX集成终端的速度以及使用git的可能性。

但是我们还需要连接到远程GIT以确保安全。 这意味着密码保护SSH ...

让人感觉...对吗?

@andrewducker实际上,它确实对我
它是否有可能在本地运行而无需从命令行启动?

@MartinZubek

什么对您有用? 你可以说得更详细点吗? 😄

@jmbelloteau当然,它不再以“权限被拒绝(公钥)”错误结尾,并且git pull / push可以按预期工作。 它使用〜/ .ssh / config文件中的正确密钥,并且每当需要密钥密码时,都会弹出此窗口:
http://imgur.com/wpExMMP

@MartinZubek,以便您可以从VScode推送?! 那很棒...
您是否从启动SSH代理的命令行启动它?
如果是,怎么办?
我不明白为什么它对我的环境不起作用

@jmbelloteau是的,我从我使用的命令行启动了vscode(确切地说,它是git-bash.exe,默认情况下,它是git的Windows附带)。 我不必手动启动ssh-agent或任何东西。 我猜它会自动从git-bash开始。

@MartinZubek该死的...

就像你说的那样对我不起作用😭

@vscodeteam有解决这个问题的计划吗?

@jmbelloteau这太难了。 它也很受欢迎。 我尝试实现的是在节点进程下启动ssh-agent,以便VSCode可以使用env变量,但这意味着多个VSCode实例将需要多个ssh-agent,并且仍然需要每次都输入密码。

我正在寻找一种使用SSH_AUTH_SOCK变量的方法。 它可以在Linux上运行,但尚未在Windows上进行测试。

还有OpenSSH与Windows Powershell SSH与PuTTY的附加问题。

如果有人愿意对其进行测试,我可以将代码推送到我的叉子上,人们可以对其进行测试。 但是,由于我使用了经过编码的路径(概念证明),这将需要一些时间。

我想我在星期六或星期日收拾一下。

@hashhar

感谢您的回答。
确实看起来确实很复杂。 😞

我不是真正的开发人员,所以我不能真正为您提供帮助,如果您发现了魔术,并给您带来好运,我会一直走下去!

@hashhar关于您的评论,我确实有2种建议:

  1. 您可以在ssh-agent path/to/code运行的ssh-agent下重新启动整个VSCode(包括祖先节点进程); 这样,无需为每个节点进程运行一个ssh-agent实例。
  2. 您可以从节点进程运行ssh-agent,获取环境变量(例如,将其打印在文件上)并在所有进程中共享它们。

我可以明确地测试。 我需要特殊的东西来建造它吗? 我已经安装了正式版本。
我可以建立它:)

@joaomoreno我想我已经准备好部分修复。

在文件extensions/git/src/askpass.ts ,我将getEnv()更改为:

getEnv(): Promise<any> {
        return this.portPromise.then(port => ({
            ELECTRON_RUN_AS_NODE: '1',
            GIT_ASKPASS: path.join(__dirname, 'askpass.sh'),
            VSCODE_GIT_ASKPASS_NODE: process.execPath,
            VSCODE_GIT_ASKPASS_MAIN: path.join(__dirname, 'askpass-main.js'),
            VSCODE_GIT_ASKPASS_PORT: String(port),
            SSH_AUTH_SOCK: process.env['SSH_AUTH_SOCK'],
            SSH_AGENT_PID: process.env['SSH_AGENT_PID'],
            SSH_ASKPASS: process.env['SSH_ASKPASS'] || '/usr/lib/ssh/x11-ssh-askpass'
        }));
    }

如果设置了SSH_AUTH_SOCK ,则从用户的环境中选择。

现在可以进行以下操作:

| ssh代理| ssh密钥已加载到代理中| 结果|
|:---:|:----:|:---:|
| ✔| ✔| ✔|
| ✔| ✘| $ SSH_ASKPASS已执行|
| ✘| ✘| 什么都没发生|

因此,要解决第二行中的问题,我们也可以从askpass.ts设置SSH_ASKPASS ,这将导致VSCode在启动时启动程序并要求提供SSH密钥密码。

不过对于最后一行,我们需要从VSCode中启动ssh-agent并设置适当的变量。

义工

如果有人愿意对此进行测试,则可以克隆我的fork(https://github.com/hashhar/vscode),切换到git-ssh-key分支并构建并运行它。 请尝试检查上表中所有组合的情况。 为了使噪音最小,您可以对此问题发表评论。

@hashharprocess.env总是传递给Git:

https://github.com/Microsoft/vscode/blob/master/extensions/git/src/git.ts#L383

没有您的代码片段,这些变量不会传递吗?

@joaomoreno好的。 深入挖掘向我展示了两个问题。

  1. VSCode显然不使用变量SSH_ASKPASS。 它被硬编码为“ / usr / lib / ssh-ssh-askpass”。 基本上,唯一的问题是VSCode不能通过告诉它如何启动提示来获取用户的ssh-key密码来协助Git。

linux上的大多数工具都提供与“ / usr / lib / ssh / ssh-askpass”符号链接的程序,但许多工具没有。 因此,我认为这是人们遇到的一个问题。

只要已经将ssh-key添加到ssh-agent密钥环中,我就可以将VSCode与SSH一起使用。

我觉得我很愚蠢。

去做:

  1. 也扩展ssh的vscode-askpass.ts等。
  2. 如果尚未运行ssh-agent,请启动它。 这只是一个方便的问题,否则您必须为每个git操作输入密码。

对不起,您工作不彻底。

不用担心,您对此很感兴趣! 👍

我已经遇到这个错误已有一段时间了,以为是我。 在这方面还有什么进展吗?

+1

+1

+1

+1

请停止垃圾邮件! 使用订阅按钮和反应按钮,不要写这些无用的注释。

我也遇到同样的问题。

image

奇怪的是,对我来说,这在Git Bash中有效,但在Windows的Bash中无效(出现上述Permission denied (publickey)错误):

$ eval `ssh-agent`
$ ssh-add /path/to/key
$ code

在这两种情况下,我都可以通过直接向远程发送SSH密钥来验证SSH密钥是否有效。 我看到的唯一区别是,在Windows的Bash中启动时,VSCode警告说它无法确定当前的工作目录。

同样的问题,我尝试了几乎所有建议的解决方案。

我在MacO上

@DavidBabel我在

@letsdevus感谢您的帮助,但不幸的是,在专业环境中这是不可行的

我发现使它起作用的唯一方法是:

  1. 安装PuTTY套件
  2. plink为Git SSH后端(使用环境变量GIT_SSH
  3. 将访问密钥添加到PuTTYgen
  4. 在执行所有操作之前,请在命令提示符下使用plink连接到要使用的服务

这可以解决问题。

碰到相同的问题,并且因为它一直在重试VSCode的性能👎

我自己刚遇到这个问题。 幸运的是,该解决方法(从shell启动代码)对我有用,但是如果问题已解决,那就很好了。

刚刚碰到这个问题,腻子解决方案似乎也有帮助,但是我不希望完全没有腻子。

我也在处理这个问题。 我为工作设置了一个单独的帐户,并拥有自己的个人帐户。 我最近一直在处理工作文件。 我可以通过,但每次都必须输入密码。 不是杀手,但生产力要低得多。

有点令人失望的是,尝试使用VSC UI克隆存储库无法使用ssh样式的git URL。 作为记录,我确实使用了受密码保护的SSH密钥,而且我经常没有运行SSH代理。 我发现额外的密码提示使我的钥匙解锁实际上有些让人放心-特别是在推出更改时。 :-)它并不庞大,因为命令行对我来说很好用(据记录,我在macOS上运行VS代码。)

@gdamore因此,它实际上对您有效,无需代理...但是我们在谈论Windows。 😝
无论如何,SSH密钥文件的名称是什么? 这是标准的吗? 还是VSCode足以找到正确的文件?

如所示,我主要在macOS上运行VScode。 我不知道这在Windows上如何工作。 我不是从Windows进行git commit,而是依靠共享文件系统(我的Windows开发实例在我的Mac上的VM中作为来宾运行)。

我也收到此错误。 在命令行中完全没有问题,但是无法在应用程序内部执行任何git活动

在工作环境中使vscode失去作用

我可以按照以下博客文章使其工作:

http://www.cgranade.com/blog/2016/06/06/ssh-keys-in-vscode.html

在OSX上,密码保护密钥存在相同的问题。

简单的解决方案:

添加一个名为GIT_SSH的用户环境变量,其路径为C:\Program Files\PuTTY\plink.exe (在使用tortoise git配置私钥的路径之后)

需要修复此问题,它不会使VS Code成为日常编辑器。 :/有关问题进度的任何信息?

希望vscode从ssh-add获得ssh凭证。

例如,源树能够检测可用凭证(使用osxkeychain?),而无需任何额外配置

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree commit -q -F /var/folders/_0/bvqq9l5d2ngg0stvkf53jrbr0000gn/T/SourceTreeTemp.ccbSGv 


git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags --set-upstream origin refs/heads/master:refs/heads/master 
Pushing to [email protected]:hanxue/gif-is-jif.git
To github.com:hanxue/gif-is-jif.git
   4eed265..762069a  master -> master
updating local tracking ref 'refs/remotes/origin/master'
Branch master set up to track remote branch master from origin.
Completed successfully

我今天在Linux Mint上遇到了这个问题。 我用钥匙扣

sudo apt install keychain

eval 'keychain --eval SSHKEY'
就是这样。

@ Silentz0r您在哪里运行了最后一条命令?

您外壳中的@ValentinH ,请阅读链接中的示例。

伙计们,这只是在等待勇敢的编码者提供PR!

在OSX上,我通过https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain修复了此问题:

~/.ssh创建具有以下内容的config文件:

Host * (asterisk for all hosts or add specific host)
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile <key> (e.g. ~/.ssh/userKey)

@joaomoreno
不知道我有多“勇敢”,但我有点像SSH迷。
我将在十二月进行PR。

所有关心的公民...

经过快速设置测试之后,似乎Windows 7配置非常简单(请参阅GIT_SSH和其他注释),我相信使用钥匙串的OS X的注释同样容易。
设置基本上是一个外部配置问题。 VSC不需要任何配置或功能更改即可使用SSH,git调用SSH客户端。 抱歉,如果我缺少明显的内容。

除了设置向导以外,我正在尝试确定添加到代码中真正有用的东西。
有一条评论提到使用多个密钥,可能需要根据工作空间配置更改环境变量。 即使如此,也可能全部由代理处理。 我认为做任何事情都没有意义,例如将ssh添加到Code中,因为git可以直接解决这个问题。

至于凭证管理:确实要由安全代理处理,例如
Pagent / keychain等。

评论?

“ VSC不需要任何配置或功能更改即可使用SSH,git调用SSH客户端。对不起,如果我缺少明显的内容。”

(在Windows上)

怎么了
如果我从快捷方式启动VS Code,并且还没有下载第三方软件并进行了一些命令行配置,则它不适用于加密的SSH密钥。

另一方面,如果我打开Eclipse并连接到Git存储库,那么它将要求我输入密钥的密码。

预期
在未安装任何其他软件的系统上,全新安装VSCode应该会弹出一个消息框,询问我的密码短语,然后使用它解密我的密钥并使用它们连接到远程存储库。

@cleidigh SourceTree会自动工作,而无需遵循@ItachiSan的说明,而Code需要进行此设置。 也许我们可以做他们在做什么。

@andrewducker
@BeginnerForLife
我稍微看了一下Eclipse和源代码树。 不幸的是,我目前无法在系统中安装这两个软件,因此我的知识和经验受到Google的限制;-)如果我缺少任何东西,请记住这一点。 这是基本的提要/差异:

Eclipse:EGit插件:包含Java git客户端,ssh客户端似乎是内部的,如果存在现有密钥,则需要导入密钥

SourceTree:图形化的get客户端,需要外部ssh客户端(下图为Windows上的plink)

image

VSC:需要外部git / ssh

@andrewducker,您的描述会跟踪我的评论,除非Code同时实现git和SSH(包括密钥生成和管理),否则我不确定两者之间是否有太多关系。 尽管可以做到这一点,但我对团队是否想同时兼顾这两个问题表示怀疑。 @joaomoreno可以这样说。
从实用的角度来看,我想指出以下几点:

  • “简易的开箱即用” git体验与使用内置HTTPS更加一致,仍然需要外部git
  • 对于那些需要SSH的工作情况,我认为存在很可能的策略和ssh
    工具已经生效,这就是我在所服务的各个公司中所经历的。
  • 假设人们同意上述观点,那么与外部工具相结合的可能性将大于
    从头开始或独立设置ssh / git。
  • 明确地说,我绝不是要暗示ssh没用和/或不是必需的,我只是说通过将git指向本地SSH客户端,VSC确实可以正常工作。
  • 我认为可以通过扩展来实现

再说一遍,在代码内部都没有git / ssh的情况下,我还没有确定一个较小的选择。 我绝对愿意为此努力,但是它必须与团队的目标保持一致,尤其要得到@joaomoreno的祝福。

@cleidigh我不知道计划是什么。

@joaomoreno
我希望得到其他各方的更多回应,但需要您对可能的计划发表意见/偏好。
需要明确的是,对于通过git进行SSH私钥访问,只需进行一些外部配置,代码似乎就可以正常工作。 这里有些人建议进行更大的集成并改善自付费用。

一些可能的方法:

1-实施git / ssh设置帮助器/向导-查找ssh,设置GIT_SSH-内部添加
2-与1相同,实现为扩展
3-扩展以上内容以协调SSH / git的下载以进行初始设置
4-实施SSH客户端/工具-内部添加
5-与扩展实现相同的4
6-内部实施git / SS H-与eclipse / egit类似

我认为1号就足够了(也许3号),尽管它并不能实现人们所谈论的一切。 选项4-6似乎过于费力,并且对关键组件进行了很大的更改。

首选项@joaomoreno /全部?

尝试在Windows上将VS Code与Git一起使用并找出痛点可能是个好主意。 对我来说,主要问题是身份验证。

选项1绝对是我的最爱。

@BeginnerForLife
如果我们发现了一些帮助程序/ ssh并进行了设置,是否有帮助?
我确实为Windows的git设置了ssh,除了安装客户端(我已经安装了它),我还设置了GIT_SSH
还添加了与代理商的关键指纹。

每个@joaomoreno偏好都专注于选项一:

  • 使用ssh和启动助手来检测带有存储库的工作空间
  • 提供命令随时启动助手
  • 搜索已安装的SSH,检查环境变量是否已设置
  • 如果未找到SSH则警告用户,建议/指向适当的客户端
  • 提供设置环境变量
  • 提示用户输入要使用的私钥并将指纹添加到代理

我相信但不能保证以上所有内容都是实用的。 假设没有人有别的好主意
我认为最好对上述内容进行原型制作。

欢迎其他反馈。

是的,我认为这些要点应包括在内。 特别是最后一个(提示用户...)应该解决很多人的问题。

@BeginnerForLife
谢谢。 我将从这种方法开始,并希望其他人也可以加入其他建议。
我想在进行PR之前,我将发布指向我的存储库的指针,以了解人们的想法。 在这里检查
跟踪我的进度。

我同意(1)是最好的方法。 现在基本上就是我要做的-如果ssh-agent尚未运行,请启动它,并设置环境变量,然后从该命令行启动VS-Code,以获取环境变量。

如果VS Code可以检查SSH-Agent尚未运行,然后在必要时将其启动,那就太好了。

我使用PowerShell的Git模块来完成所有这些操作-但它使用的逻辑来自:
https://help.github.com/articles/working-with-ssh-key-passphrases/
因此,从Node的角度来看,希望该方法能起作用(尽管您可能需要检查它是否适用于所有操作系统)

@andrewducker cc:全部

更新:我不得不回到以前的PR,但实际上,我已经在此方面取得了很大进步:

  • 除了检查/设置GIT_SSH之外,还可以检查git客户端(密钥代理)
  • 还发现Windows密钥代理在启动后似乎允许添加密钥
  • 我认为我们可以在代码下安装新的密钥,启动密钥代理,密钥代理本身会提示输入密码。
  • 下一个实验是我是否可以检测到失败的SSH登录

应该可以在一天左右的时间回到这一点。

在macOS High Sierra上也是如此,其默认私有密钥受密码保护。 密码短语在登录会话期间存储在OS钥匙串中。 重新启动Mac时,为了获得额外的安全性,我必须在第一个git pull / git push之前重新输入一次,从那时起不再要求输入密码,直到我注销为止。 这是我第一次与远程仓库交互时终端的行为:

$ cd /path/to/repo
$ git pull
Enter passphrase for key '/Users/me/.ssh/id_rsa':
[me typing passphrase and pressing enter]
Updating 3e97c76..65a959c

但是,当是VSCode尝试在重新引导后提取某些内容时,将显示此错误:

screen shot 2018-02-12 at 11 05 09

解决方法是打开终端,导航到存储库,然后输入git pull 。 不是灾难,但是可以改善。

__UPD:__有趣的是,当要求GPG密钥密码来签署新提交时,VSCode可以迅速工作并显示带有输入字段的弹出窗口。

这是什么状态?

当前,显示错误Git: [email protected]: Permission denied (publickey).

~\.ssh创建了密钥对的用户可以通过命令行输入密钥对的密码来进行身份验证,但不能在VS Code中进行。

@cleidigh有运气吗?
有谁知道我们如何拦截密码请求事件? 我认为一旦被拦截,我就有机会去做原子做的事情并提供一个文本框来使用。 但是atm我迷失了主意。

我遇到了各种各样的凭证问题,直到我意识到问题不在于VSCode而是环境。 如果正确配置了ssh,git等,则不会有任何问题,对于Linux和Windows都是如此。 如果出现问题,您可以随时通过终端强制执行。

我不需要为其他IDE设置环境。
例如,在Eclipse中,我可以直接启动它,并且当它需要访问远程git存储库时,它将要求我提供密码以解密我的SSH密钥。
Visual Studio代码也应该这样做。

全部:更新
尽管我在这方面取得了很大进步,但由于种种原因我不得不将其搁置一旁,因此自一月份以来我没有取得太大进展。 对于那个很抱歉。 我希望这能在五月进行。

@ john681611 @andrewducker

如该线程前面所述,无法“干净地”实现的一个基本问题
正在提示或对密钥进行任何类型的管理。 这是因为代码依赖于外部GIT,并且
GIT依赖于系统SSH。 如果没有代码在内部实现这些功能(例如eclipse),我们与这些外部组件进行交互的选项将有限。

我当前的原型可以执行以下操作:

  • 检查是否有任何存储库使用SSH(如果已启动),请进行以下配置向导:
  • 检查并提示输入环境变量GIT_SSH
  • 检查SSH客户端
  • 如果可能的话,从客户端强制密码对话框(WIP)注意此提示是客户端的不是代码的

我同意每个@andrewducker像Eclipse一样做出响应是很好的,但这意味着团队必须实现已经处理的重要功能。

注意:另一种方法可能是,如果我们可以让官方的GIT客户端处理更多可用于控制SSH的安全性参数。 这样可以保持当前架构不变

全部/更新

我一直在研究原型的最后一个也是最重要的部分:askpass填充程序,以允许Code提供本机口令GUI提示。 目前,我相信这是有可能的,并且结合适当的平台ssh-agent,凭据将以其正常方式存储。

我的问题是我无法在Windows的GIT Bash或CMD下使用SSH或GIT来兑现SSH_ASKPASS,GIT_ASKPASS或core.askpass。 终端提示是唯一显示的内容。 作为最基本的测试,我将其中一个或全部设置为内置的git-gui--askpass,但是,即使从命令行进行测试,该程序也可以执行,但这也不起作用。

是否有人利用这些方法来更改Windows或任何其他相关方案上的密码短语条目?

Sourcetree也会弹出一个终端。 它没有那么坏。

要在macOS 10.12 Sierra及更高版本上添加到@ValentinH的解决方案中,只需UseKeychain指令即可在我的机器上解决此问题(macOS 10.13.5 High Sierra Developer Beta,17F70a)。 AddKeysToAgent指令似乎不是必需的。 此配置对我有用:

Host github.com
  HostName github.com
  IdentityFile /path/to/your/ssh/private/key
  UseKeychain yes

这是什么状态?

'14581:VS代码要求将git ssh密钥命名为“ id_rsa”,此问题已被关闭。 不知道我怎么看这是重复的-“使用私钥密码支持git”。 这些似乎是分开的问题。

编辑:这只是我正在运行的终端的单个实例的修复; 即使在同一代码会话中打开新终端,也再次导致公钥错误

看来我的ssh-agent已死于某个时刻,或者忘记了我用于git的非“ id_rsa”密钥。 所以我就跑了:

eval "$(ssh-agent -s)"
ssh-add path/to/my/github/ssh/private/key

一切恢复正常。 这是GitHub告诉您在仍然设置新的SSH密钥时要运行的命令序列。

我承认我还没有阅读大部分该主题,但是对我来说这是可行的。

@cleidigh @joaomoreno这可能不是错误,而是错误地设置了ssh密钥,尤其是在macOS中。 Sierra彻底改变了会话中密钥的保存方式

当我重新生成没有密码短语的新sshkey时,我就解决了。 我想也许vscode无法打开外壳程序让您输入密码。

只需使用ssh-add -K ~/.ssh/id_rsa将我的钥匙添加到Mac钥匙串中即可; 如果您不使用默认值,请用密钥替换id_rsa

Windows 10的解决方法:

  1. 使Git使用Windows随附的OpenSSH,而不是Git随附的OpenSSH。
    git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
  2. 将ssh-agent服务(不是git随附的服务)设置为自动运行。
    打开任务管理器的“服务”选项卡,单击“打开服务”。
    查找OpenSSH身份验证代理,打开属性,将“启动类型”设置为“自动”,然后单击“确定”。
    另外,启动服务或重新启动计算机。
  3. 将受密码保护的密钥添加到代理。
    ssh-add
    它应该自动选择存储在C:\ Users \%USERNAME%\。ssh中的密钥,这是ssh-keygen创建它们的地方。
    在提示符下输入您的密码。

注意:如果在安装Windows版Git时,选择了将bash命令添加到PATH的选项,则ssh-add命令可能指向错误的可执行文件。 如果是这样,您可以手动运行附带的密钥将密钥添加到代理中:
C:\Windows\System32\OpenSSH\ssh-add.exe

现在,内置的OpenSSH身份验证代理将在启动时运行,并且您的密码保护密钥已解锁,并且Git将使用Windows OpenSSH而不是它自己的。 因此,无需每次都输入密码,无需手动启动ssh代理,也无需从命令行启动VS Code。

恰如LynnScarlett所注意到的那样,没有办法为密钥输入密码,并且使用密钥链是不安全的,那么VSC会增加对此基本功能的支持吗?

我看不到钥匙串不安全。 此外,流行的IDE确实允许输入密码,因此VSC可以非常支持两种输入方法

我的意思是ssh-agent我可能会混淆两件事,我不确定:)

Ssh代理仅在每次会话加载密钥的意义上是“不安全的”。 如果计算机受损,则还有其他问题

这更详细地解释了使用ssh-agent的安全性:
http://rabexc.org/posts/pitfalls-of-ssh-agents
干杯!

这些全部归结为:不要将您的计算机信任具有root访问权的其他人-无论如何您都不应该这样做。 再说一遍:如果ssh-agent由于该文章中的详细信息而被破坏,您将遇到更大的问题

@whatsyourgithub解决方案为我工作。 但是我猜这不是最好的解决方案。

VS代码版本:代码1.27.2(f46c4c4,2018-09-12T16:17:45.060Z)
操作系统版本:Windows_NT x64 10.0.17134
git版本2.19.0.windows.1

还是行不通。

到现在已经两年了,仍然没有解决办法。 同样的问题也适用于Atom,所以我想这不是很容易添加的东西吗? 我真正想要的只是源代码控制面板中More Actions ... git下拉菜单中的Push(带有密码)

我很高兴在每次推送时都输入密码,我只是不想去命令行输入Raw git命令。

到现在已经两年了,仍然没有解决办法。 同样的问题也适用于Atom,所以我想这不是很容易添加的东西吗? 我真正想要的只是源代码控制面板中More Actions ... git下拉菜单中的Push(带有密码)

我很高兴在每次推送时都输入密码,我只是不想去命令行输入Raw git命令。

尝试使用https而不是ssh克隆存储库。 这使得VS Code为我询问用户名和密码。

我刚从Atom来检查VS Code中的Github Pull Request,首先想到的是

请确保您具有正确的访问权限
并且存储库存在。

git show:index.html
git pull-标签起源大师
git show:index.html
[email protected] :权限被拒绝(公钥)。
致命:无法从远程存储库读取。
请确保您具有正确的访问权限
并且存储库存在。

因此,我不会在不输入密码的情况下仅将选项与ssh密钥一起使用。
因此,稍后我将返回VS代码和Github Pull Request扩展。
我喜欢到目前为止社区所做的一切,我希望以后以我的安全偏好使用它。

尝试使用https而不是ssh克隆存储库。 这使得VS Code为我询问用户名和密码。

谢谢,这对我也有用。 并且,如果您安装了Git for Windows凭据管理器,并在VS代码中的git bash shell中键入以下命令:
git config --global credential.helper manager
然后进行同步并完成工作,而无需重新键入Gitlab用户ID和密码。

鉴于这是Gitlab存储库路径的默认设置,如果可以对SSH做同样的事情,那将是很好的选择。

@whatsyourgithub ,想使用您的解决方案(看起来比原始的和有缺陷的“通过命令提示符启动VSC”更好),但我收到一条VSC错误消息:
Git:没有这样的身份:/C/Users/myuser/.ssh/myrsaKey_rsa
即使文件在那里。
而且,另一件事...在尝试C:\ Windows \ System32 \ OpenSSHssh-add.exe时,我也得到了No这样的文件或目录。
我正在使用VSCode powershell键入这些命令
有任何想法吗?

我改用https而不是SSH。 那是我可以让它发挥出色的唯一方法。 有趣的是, Github实际上建议使用https而不是SSH。

@whatsyourgithub ,想使用您的解决方案(看起来比原始的和有缺陷的“通过命令提示符启动VSC”更好),但我收到一条VSC错误消息:
Git:没有这样的身份:/C/Users/myuser/.ssh/myrsaKey_rsa
即使文件在那里。
而且,另一件事...在尝试C:\ Windows \ System32 \ OpenSSHssh-add.exe时,我也得到了No这样的文件或目录。
我正在使用VSCode powershell键入这些命令
有任何想法吗?

我会先尝试在VS Code之外打开Powershell,尽管没关系。

OpenSSH应该随Windows 10的最新版本一起安装。请尝试更新。
如果这不起作用,请尝试转到“设置”>“应用程序”>“应用程序和功能”>“管理可选功能”>“添加功能”,然后查找OpenSSH。

@whatsyourgithub ,想使用您的解决方案(看起来比原始的和有缺陷的“通过命令提示符启动VSC”更好),但我收到一条VSC错误消息:
Git:没有这样的身份:/C/Users/myuser/.ssh/myrsaKey_rsa
即使文件在那里。
而且,另一件事...在尝试C:\ Windows \ System32 \ OpenSSHssh-add.exe时,我也得到了No这样的文件或目录。
我正在使用VSCode powershell键入这些命令
有任何想法吗?

我会先尝试在VS Code之外打开Powershell,尽管没关系。

OpenSSH应该随Windows 10的最新版本一起安装。请尝试更新。
如果这不起作用,请尝试转到“设置”>“应用程序”>“应用程序和功能”>“管理可选功能”>“添加功能”,然后查找OpenSSH。

你好
感谢回复。
OpenSSH(客户端)已经安装。
我使用standaone powershell重复了该过程,但是我一直收到错误消息
no such identity: /C/Users/<user>/.ssh/RSAPRIVKEY_rsa: No such file or directory
这与RSAPRIVKEY_rsa的所有权有关吗? 我没有使用Powershell发行密钥,而是从另一个地方复制了密钥(无论如何,它可以与Source树或Git GUI一起使用)

@whatsyourgithub ,想使用您的解决方案(看起来比原始的和有缺陷的“通过命令提示符启动VSC”更好),但我收到一条VSC错误消息:
Git:没有这样的身份:/C/Users/myuser/.ssh/myrsaKey_rsa
即使文件在那里。
而且,另一件事...在尝试C:\ Windows \ System32 \ OpenSSHssh-add.exe时,我也得到了No这样的文件或目录。
我正在使用VSCode powershell键入这些命令
有任何想法吗?

我会先尝试在VS Code之外打开Powershell,尽管没关系。
OpenSSH应该随Windows 10的最新版本一起安装。请尝试更新。
如果这不起作用,请尝试转到“设置”>“应用程序”>“应用程序和功能”>“管理可选功能”>“添加功能”,然后查找OpenSSH。

你好
感谢回复。
OpenSSH(客户端)已经安装。
我使用standaone powershell重复了该过程,但是我一直收到错误消息
no such identity: /C/Users/<user>/.ssh/RSAPRIVKEY_rsa: No such file or directory
这与RSAPRIVKEY_rsa的所有权有关吗? 我没有使用Powershell发行密钥,而是从另一个地方复制了密钥(无论如何,它可以与Source树或Git GUI一起使用)

好。 解决了..在./ssh/config文件中,我具有ssh键的路径s C:\ Users \.ssh \ RSAKEY_rsa并将其更改为〜/ .ssh / RSAKEY_rsa
然后只需要注册密钥就可以了。
谢谢

@whatsyourgithub ,很抱歉再次打扰。 我正在尝试帮助我的同事,但他没有成功(按照您上面的建议做的对我有用,但对他没有用)。 这些是症状:
他能够从PS控制台执行git fetch,但是当他使用gitacora推送或同步时(该插件可以自动同步-我也使用了它而没有任何问题),他收到以下错误消息:
Permission denied (publickey).
我们知道该密钥已由OpenSSH添加,因为C:\Windows\System32\OpenSSH\ssh-add.exe -L检索了他的公共密钥,并且,如果我们使用PS中的git fetch命令,它将起作用。
有什么想法可以帮助他诊断/修复?

@whatsyourgithub ,很抱歉再次打扰。 我正在尝试帮助我的同事,但他没有成功(按照您上面的建议做的对我有用,但对他没有用)。 这些是症状:
他能够从PS控制台执行git fetch,但是当他使用gitacora推送或同步时(该插件可以自动同步-我也使用了它而没有任何问题),他收到以下错误消息:
Permission denied (publickey).
我们知道该密钥已由OpenSSH添加,因为C:\Windows\System32\OpenSSH\ssh-add.exe -L检索了他的公共密钥,并且,如果我们使用PS中的git fetch命令,它将起作用。
有什么想法可以帮助他诊断/修复?

听起来他的密钥未链接到他的github帐户,或者他的github帐户未添加为回购中的协作者。

听起来他的密钥未链接到他的github帐户,或者他的github帐户未添加为回购中的协作者。

我正在管理bitbucket服务器,并在其中添加了他的发布密钥(实际上,当他通过PowerShell使用命令行时,他能够访问访存和推送)。
还是我没有从您的答案中找到答案?

只需使用ssh-add -K ~/.ssh/id_rsa将我的钥匙添加到Mac钥匙串中即可; 如果您不使用默认值,请用密钥替换id_rsa

macOS High Sierra与代码
[email protected] :权限被拒绝(公钥)。
致命:无法从远程存储库读取。

标记这是因为这解决了集成git在vscode内无法正常工作的问题,即使它在命令行中也能很好地工作。

@whatsyourgithub在生成新的id_rsa之后,似乎可以通过git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"工作。

  1. 但是按键有密码,当我按此键时,没有提示窗口对话框让我输入密码。
  2. 如果我使用通过ssh-add .ssh\id_rsa在我的PC上退出的密钥,则会出现错误。 为什么我不能添加密钥? 我想使用以前添加的同一密钥。
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
Permissions for 'D:/ablob/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "D:/ablob/.ssh/id_rsa": bad permissions
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

作业系统:Windows 10
VSC:1.28

任何更新?

有什么计划在不久的将来解决这个问题?

根据VS Code文档(https://code.visualstudio.com/docs/editor/versioncontrol):

我可以在VS Code中使用SSH Git身份验证吗?
是的,尽管VS Code最容易在没有密码的情况下使用SSH密钥。 如果您具有带有密码短语的SSH密钥,则需要从Git Bash提示符启动VS Code来继承其SSH环境。

此页面的日期为12/12/2018。

因此,我只是生成了没有密码的新ssh密钥(通过在提示时将其保留为空并覆盖以前的密钥),将它们添加到GH上的帐户中,还通过运行ssh-add.exe ~\.ssh\id_rsa将身份添加到ssh-agent中。 现在,一切正常。

如果其他人可以证实这一点,我建议您结束本主题,因为正式的VS Code文档已经明确指出,仅通过从git-bash启动VS Code才能使用密码短语。

如果其他人可以证实这一点,我建议您结束本主题,因为正式的VS Code文档已经明确指出,仅通过从git-bash启动VS Code才能使用密码短语。

好吧,文档说“最容易”,并不是说密钥有密码短语时它根本无法工作,并且它的建议是从Git Bash提示符启动VS Code的建议仅适用于使用Windows Git的用户。 SSH代理来管理其密钥。

我实际上可以确认我使用Windows的SSH代理(不是Windows的Git随附的代理),将我的(受密码保护的)SSH密钥加载到其中,然后正常启动VS Code(不是从任何特定的命令提示符下启动),我可以成功git push / pull到需要我的钥匙的仓库。

我确认通过git bash打开VS Code将要求ssh密钥,而在VS code中将要求在终端中输入ssh密码。

我在Windows 10上的VSCode遇到类似问题,但无法在终端中从_ ssh:// repo_推/拉。

我正在将CMDer与git-for-windows一起使用,并且将VSCode配置为指向这些二进制文件的git.path。 我在_%USERPROFILE%\。ssh_目录中也有ssh配置文件,其中包含所有必需的选项,并且身份文件设置为公钥文件。 KeePass和KeeAgent一起提供密钥。

前面提到的过程是先运行终端(CMDer),然后从中运行Code可以正常工作,但我不喜欢它。 因此,我尝试(成功)了另一种方法:
在git.exe目录中,我创建了cmd文件:

<strong i="10">@echo</strong> off
set SSH_AUTH_SOCK=/path/to/my/sock.file
%~dp0git.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

(SSH_AUTH_SOCK路径需要有正斜杠),并在代码中将git.path选项指向它。

现在,代码开始运行,似乎可以读取_〜/ .ssh / config_文件,而没有任何其他“黑客”,并且可以使用该代理。

编辑:
我猜想,全局设置SSH_AUTH_SOCK环境变量也会有所帮助-每个应用程序都可以访问密钥的成本...

"you'll need to launch VS Code from a Git Bash prompt to inherit its SSH environment."

我从微软那里听到的最平庸的事情之一; 我不必从特定的命令行启动VS Code来使ssh起作用; 也许尝试实施适当的解决方案。

积压? 真?

这个问题使我切换到了powershell和posh-git,效果很好。 为了使ssh-agent无缝工作,我必须将以下内容添加到$profile.CurrentUserAllHosts (默认为C:\Users\USERNAME\Documents\WindowsPowerShell\profile.ps1 )。

Import-Module posh-git
Set-Alias ssh-agent "$env:ProgramFiles\git\usr\bin\ssh-agent.exe"
Set-Alias ssh-add "$env:ProgramFiles\git\usr\bin\ssh-add.exe"
Set-Alias ssh "$env:ProgramFiles\git\usr\bin\ssh.exe"
Start-SshAgent -Quiet

如果其他人可以证实这一点,我建议您结束本主题,因为正式的VS Code文档已经明确指出,仅通过从git-bash启动VS Code才能使用密码短语。

我必须在这里不同意:这个问题是关于VS Code中缺少适当的SSH密码支持的,而记录在案的解决方法很简单-一种解决方法。 懒惰的用户已经有太多的诱惑要跳过良好的口令安全性,因此任何现代工具都应该使“正确操作”变得容易。

根据上面其他人的建议,我刚刚创建了一个bash脚本文件(即projectName.sh ),并在其中编写了以下内容:
"location/to/Code.exe" "location/to/project"

现在,我要做的就是双击该文件以打开VSCode并使用带有密码短语的证书。

BTW:在情况下,它可以帮助其他人碰到这个问题磕磕绊绊,我也只好: git config --global http.sslBackend schannel所描述这里

我感到困惑的是,经过两年的发展,“使用带有密码的密钥的ssh使用git一起使用git进行工作”这一基本问题尚未得到解决,但使用丑陋的解决方法却无法解决。 VSCode是很棒的恕我直言的编辑器,但确实需要此“功能”。 请优先处理

这是我在stackoverflow上发表的一篇旧文章,可能会有所帮助; 一种选择是使用Windows凭据管理器: https :

我想的问题是,VSCode是否应负责将SSH / HTTPS凭据作为密钥库管理器进行处理。 似乎应该由操作系统,第三方程序或与前两点混在一起的git正确配置来处理。

尽管我喜欢此功能的声音,但好像Unix和Windows应该已经可以解决此问题而不将其添加到VSCode中。

不知道这些github文章中的任何内容是否对您有帮助: https :
最终听起来像是他们在告诉您在Windows上使用bash /另一种bash Windows替代方法,然后通过一种变通的解决方法使人们回到同一问题:\

@ctsstc是的,我已经安装了Windows的Git凭据管理器,但是由于某种原因,它无法正常工作。 我知道这可能不是VSCode的责任。 例如,在Android Studio和基于IDEA的IDE中,他们只关心调用git二进制文件,并且它们唯一的集成是当操作需要密码时,IDE会将其安全地持久保存并传递给Git-也许这是一个好方法。 也许这是他们唯一缺少的东西?

@ctsstc非常不同意,您不能为CLI程序实现用户界面(在这种情况下为GIT ),然后声称在程序需要输入时不再是您的问题; 如果您不希望人们依靠VC使用git,那么您就不应从一开始就集成git,请不要混蛋,特别是如果它应该由Microsoft支持的话,也不要混蛋。 -具有数十年历史的安全最佳做法,例如带有密码短语的SSH密钥。

我想这里的一个重要意义是Atom会记住git repos的SSH密码。 由于vscode都基于相同的编辑引擎,因此它们肯定可以做到吗?

我想的问题是,VSCode是否应负责将SSH / HTTPS凭据作为密钥库管理器进行处理。

我不认为应该这样做,但是我也不相信这就是这里所要的。 正如@Ivanca指出的那样,VSC选择了在git之上显示UI,因此问题是应该通过该UI公开多少git功能。 我不希望每一个晦涩的git操作都可以通过VSC获得,但是pull / push是基础-我不认为VSC可以声称完全支持它们,而无需为底层密码挑战提供UI胶水。

因此,预期的结果是提示输入密码。 我认为这是一个合理的要求/功能。

而不是显示:

Permission denied, please try again.
Permission denied (publickey,password).

我觉得几天前我最近在Mac上已经看到了此功能,但是也许它没有在Windows上实现,或者也许正在要求我的系统密码来访问系统密钥库。

编辑,只是在Mac上尝试过:

image

因此,看起来Mac上支持此功能,但Windows不支持(我假设此问题仍然存在),因此该功能是在两个OS之间具有奇偶校验。

有任何更新吗? 自从这个问题被报道以来已经两年了,仍然无法让VSCode与Git SSH一起使用:
image

@ctsstc我可以在“终端”选项卡中确认它在Mac中能正常工作。 缺少的是在使用GUI的pull / push提取功能时提示输入密码。 它只是忽略了密钥上有密码短语的事实,并提交了一个null / nil密码,导致git操作失败。

我坚信无论VSC是否决定缓存密码短语凭证,都应该解决此问题。 rsa密钥上有密码短语时,请不要失败,提示输入密钥。

什么时候会发生?

这会解决吗? Windows上的同样问题

看起来没有希望。 我放弃了,从SSH切换到https。

我当前的解决方法:无论如何,我通常都会在VSCode中打开一个终端(使用它与npm进行交互,等等),所以我只是从那里开始git push 。 这不是_应该_如何工作,但是至少确实提示我输入密码。

在macOS上,我最后将其添加到~/.ssh/config中(这很重要,请不要在下面添加任何内容):

Host *
   AddKeysToAgent yes
   UseKeychain yes 

然后我做了一个git pull因此macOS会要求我的ssh密码。 之后,macOS再也不会询问我密码了,因此VSCode的版本控制可以正常工作。

希望它能帮助某人。
干杯!

其他解决方法:

  • 使用腻子中的plink而不是ssh作为git ssh commad,然后使用pageant加载密钥
  • 在http / https上使用git而不是ssh上使用git

有没有人在Windows上尝试过这两种方法?

https://github.com/PowerShell/openssh-portable

我使用win32-openssh,如上,通过从终端推送git来解决。 缺少ssh://路径,这是我已经提出的与此相关的问题。 我的主要用例是使用sshfs扩展,而git和其他扩展(如python)无法使用,因为它们不知道如何解释ssh://

有什么计划支持这一点吗?

这仍然是一个问题。 解决方法并不是每个人都可以选择的。 例如,他人可能会(潜在地)访问我的机器,因此我不会解锁我的钥匙。 就我而言,命令行上的git只是要求输入密码,我想说VS Code应该在弹出窗口中执行相同的操作。

实际上,这在2年后就不再是功能了,这让我感到震惊,但仍然想知道为什么还没有对此进行优先排序。

当前使用的是VSC版本1.34.0
qwe
并且问题尚未解决。

在Windows 10上也仍然存在此问题。由于Windows 10中包含OpenSSH,所以我摆脱了Putty,但是VS Code似乎不尊重它? 我必须在VSCode中手动推动和拉动终端,这工作正常,但我喜欢仅单击一个按钮即可进行同步。

@ arcs-鉴于git没有提供与SSH密钥子进程进行交互的方式,这不太可能得到解决。 如果他人可以访问您的机器,则在离开办公桌时将其锁定。 否则,您可以在macOS或Windows中启动ssh-agent来解决此问题,如下所述: https :

@ flaw600仅当我从已初始化ssh-agent的同一git-bash窗口中启动代码时,此过程似乎才有帮助,这有点笨拙,并且阻止了对资源管理器的右键单击扩展的使用。

事实已经过去了3年,而且此链接仍然适用,这似乎是不幸的。
https://nathan.alner.net/2015/08/24/vs-code-ide-with-passphrased-git-ssh-keys/

通过开始菜单打开code会忽略ssh-agent并无法拉/推。

有什么建议? 与其他平台相比,现在进行开发是一个很大的痛点。

一段时间以来,使用https是一种出色的解决方案。 它的每一点都是安全的(如果不是这样的话) ,因为您可以创建用于访问的特定令牌。 Windows SCM凭据管理器会自动处理所有事情。

另外,我很确定HTTPS实际上比SSH

@gdamore :任何证据都支持您对HTTPS是
比SSH快?

在2019年6月17日星期一11:45,gdamore [email protected]写道:

一段时间以来,使用https是一种出色的解决方案。 它的每一点都是
安全(如果不是安全的话),因为您可以创建用于访问的特定令牌。
Windows SCM凭据管理器会自动处理所有事情。

另外,我很确定HTTPS实际上比SSH

-
您收到此邮件是因为您发表了评论。
直接回复此电子邮件,在GitHub上查看
https://github.com/microsoft/vscode/issues/13680吗
或使线程静音
https://github.com/notifications/unsubscribe-auth/AFLBAEOC5BVCGGJ7EDXTINTP265Q7ANCNFSM4CSXV3PQ

我们已经看到了这一点,它不是专门用于git,而是用于其他用途(大文件副本)。 我认为这确实与在TCP层设置的东西有关,在SSH看来,SSH的值更适合交互式使用,而HTTP往往针对实际移动的文件进行了更优化,这就是git在这种情况下所做的。

我讨厌这样说,但是它神奇地开始为我工作。 不知道它是通过Powershell还是CMD启动SSH -我不知道! 尝试一堆,然后神奇地工作了。

在Windows上,您可以将pageant用作SSH代理,然后将env变量GIT_SSHplink 。 这两个工具都是PuTTY的一部分,还与TortoiseGit捆绑在一起。

我在Mac上不好吗

在2019年7月3日星期三上午11点,贾斯汀[email protected]写道:

在Windows上,您可以将pageant用作SSH代理,然后设置env
变量GIT_SSH进行plink。 这两个工具都是PuTTY的一部分,
与TortoiseGit捆绑在一起。

-
您收到此邮件是因为您发表了评论。
直接回复此电子邮件,在GitHub上查看
https://github.com/microsoft/vscode/issues/13680吗?
或使线程静音
https://github.com/notifications/unsubscribe-auth/AFBZHXD63DGD5FUXRJYMLXDP5TJN7ANCNFSM4CSXV3PQ

@ Jazun713 mac可以正常工作: https :

为什么这仍然是一件事?

哇,所以3年后仍然无法通过ssh连接VS代码,至少要从命令行启动它

好吧,我没有设置密码短语,但是我以某种方式能够让VSCode至少设置为以根身份打开(或以Windows作为管理员)使用ssh。 这是在我安装Openssh或在Windows中建立与Putty的连接之后。 在我检查了ssh的配置并安装之后,按照此处的指示进行https://help.github.com/en/articles/testing-your-ssh-connection 。 请同时参考它,它的确提供了许多有用的见解,因为每种情况都取决于您如何设置ssh代理和操作系统(我正在运行Ubuntu 18.04) https://help.github.com/en/articles/错误权限拒绝的公钥

使用1.36.1版本,仍然无法使用密码通过SSH通过SSH连接到Github-必须将密码从我的密钥中删除。 有什么困难? 使用HTTPS时,您需要输入git用户名和密码...(多次,这就是为什么我不想使用它)。

这有点烦人。 将密码与SSH密钥一起使用可提高安全性。 从技术上讲,它是2FA的一种形式(您所拥有的:密钥+您所知道的:密码)。 我在MacOS上使用此编辑器,跳进所有git操作的控制台确实很烦人。 VS Git UI只会失败。 它应该弹出一个密码输入

在macOS上,我最后将其添加到~/.ssh/config中(这很重要,请不要在下面添加任何内容):

Host *
   AddKeysToAgent yes
   UseKeychain yes 

然后我做了一个git pull因此macOS会要求我的ssh密码。 之后,macOS再也不会询问我密码了,因此VSCode的版本控制可以正常工作。

希望它能帮助某人。
干杯!

以上对我有用。 也许可以在此处输入注释: https :

这对于在Windows上获得分辨率或适当的解决方法非常有用。

“适当的解决方法”是使用HTTPS URL而不是SSH,以及git-scm凭据管理器。 对我来说很完美。

从Windows 10的邮件发送

来自:凯·理查森
发送:2019年8月28日星期三上午9:33
至:microsoft / vscode
抄送:gdamore; 提到
主题:回复:[microsoft / vscode]使用私钥密码支持git(#13680)

这对于在Windows上获得分辨率或适当的解决方法非常有用。
-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看,或使该线程静音。

@gdamore ,这不是正确的解决方法。 此问题专门用于使用SSH协议。 某些人可能正在使用Git服务器,其中管理员明确不允许http(s)Git操作,因此告诉他们使用https不能为他们提供解决方案。

@ Kai-Richardson如果将Git配置为使用支持SSH代理的SSH命令并在该代理中打开密钥,则它在Windows上可以工作。

  1. TortoiseGit:将Env变量GIT_SSH设置为TortoiseGit安装文件夹中的TortoiseGitPlink.exe ,将私钥转换为包含的puttygen.exe PPK格式,然后在pageant.exe打开私钥GIT_SSH设置为plink.exe并使用puttygen / pageant。
  2. 安装官方的MS OpenSSH(链接,我使用启用了SSH代理功能的Chocolatey ),启动ssh-agent服务,使用ssh-add <path to key file>打开私钥,并将环境变量GIT_SSH设置为ssh.exe (通常是C:\Program Files\OpenSSH-Win64\ssh.exe )。 我唯一的问题是在8.0版本之后,它似乎无法读取传统的私钥( -----BEGIN RSA PRIVATE KEY-----格式,而偏爱-----BEGIN OPENSSH PRIVATE KEY-----格式)。

更新了我的Visual Studio代码,无法再通过该应用程序与我的github进行交互。 版本1.37.1

操作系统:Windows 10 Pro:version:10.0.17134 Build 17134

MS团队只讨厌SSH吗?

哪个IDE实际支持SSH密码? 因为Jetbrains的产品也不是。 因此,您有3个最大的供应商中有2个不本地支持SSH密码(另外一个-Github-我只是不知道他们的Atom编辑器是否本地支持SSH密码)。

2019年8月29日,晚上8:43,克里斯·米格特[email protected]写道:

由Visual Studio代码更新,无法再通过该应用程序与我的github进行交互。 版本1.37.1

MS团队只讨厌SSH吗?

-
您收到此邮件是因为有人提到您。
回复此电子邮件直接,查看它在GitHub上https://github.com/microsoft/vscode/issues/13680?email_source=notifications&email_token=ACKS4GSGFBF2OGBCXPN55LDQHB3NLA5CNFSM4CSXV3P2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5QI7ZA#issuecomment-526421988 ,或静音线程https://github.com/notifications/取消订阅auth / ACKS4GTHNDBY5DETIRNVX6TQHB3NLANCNFSM4CSXV3PQ

我有什么错误吗? 我只是在Windows上以双启动方式启动Kali Linux

  1. 经过漫长的过程,一切都进行得很顺利和完美,但是
    连接到git的设备被连接并标记在一起,当我尝试
    得到路径。 Booommmmm这么多文件被拉到我的硬盘上...什么
    正在发生 ????

王子KK301088

在2019年8月31日星期六,漏洞600上午8:59, notifications @ github.com写道:

哪个IDE实际支持SSH密码? 因为Jetbrains的产品
也不要。 因此,您在前3名供应商中有2家不支持SSH
本地密码(另一个-Github-我只是不知道他们是否
Atom编辑器本机支持SSH密码。

2019年8月29日,晚上8:43,克里斯·米格(Chris Migut) [email protected]
写道:

由Visual Studio代码更新,无法再与我的github交互
通过应用程序。 版本1.37.1

MS团队只讨厌SSH吗?

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看<
https://github.com/microsoft/vscode/issues/13680?email_source=notifications&email_token=ACKS4GSGFBF2OGBCXPN55LDQHB3NLA5CNFSM4CSXV3P2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKKTDN5WW2issue
或使线程静音<
https://github.com/notifications/unsubscribe-auth/ACKS4GTHNDBY5DETIRNVX6TQHB3NLANCNFSM4CSXV3PQ

-
您收到此消息是因为您已订阅此线程。
直接回复此电子邮件,在GitHub上查看
https://github.com/microsoft/vscode/issues/13680?email_source=notifications&email_token=AH4ENDPM4O6N2MT3BFLXGRTQHG66NA5CNFSM4CSXV3P2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTTCOM5CAS
或使线程静音
https://github.com/notifications/unsubscribe-auth/AH4ENDORTBRU3GTGOWJFOVLQHG66NANCNFSM4CSXV3PQ

哪个IDE实际支持SSH密码? 因为Jetbrains的产品也不是。 因此,您有3个最大的供应商中有2个不本地支持SSH密码(另外一个-Github-我只是不知道他们的Atom编辑器是否本地支持SSH密码)。

关于同一问题有一个重复的https :

链接受密钥保护

从我的iPhone发送

2019年9月16日下午1:32,vitasam [email protected]写道:

哪个IDE实际支持SSH密码? 因为Jetbrains的产品也不是。 因此,您有3个最大的供应商中有2个不本地支持SSH密码(另外一个-Github-我只是不知道他们的Atom编辑器是否本地支持SSH密码)。

克里斯·米古特(Chris Migut)在2019年8月29日下午8:43。 * >写道:由Visual Studio代码更新,无法再通过应用程序与我的github交互。 版本1.37.1 MS团队是否讨厌SSH? —您收到此邮件是因为有人提到您。 回复此电子邮件直接,查看它在GitHub <#13680?email_source =通知&email_token = ACKS4GSGFBF2OGBCXPN55LDQHB3NLA5CNFSM4CSXV3P2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5QI7ZA#issuecomment-526421988>,或静音螺纹https://github.com/notifications/unsubscribe-auth/ACKS4GTHNDBY5DETIRNVX6TQHB3NLANCNFSM4CSXV3PQ。

关于同一问题有一个重复的线程,有人说Atom确实本地支持SSH密钥: https :

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看,或使该线程静音。

有趣的是,我可以打开链接。 来自Atom的对话框:
atom_ssh_key_pass

除了添加上面的ssh config条目

如果窗户

Set-Service ssh-agent -StartupType Automatic 

在PowerShell中
现在vs代码不应该提示...

除了添加上面的ssh config条目

如果窗户

Set-Service ssh-agent -StartupType Automatic 

在PowerShell中
现在vs代码不应该提示...

尝试此操作时出现权限错误。 有什么建议?

Set-Service:由于以下错误,无法配置服务“ OpenSSH身份验证代理(ssh-agent)”:访问被拒绝
第1行: char:1
+ Set-Service ssh-agent -StartupType自动
+ ~~ ~~~~ ~~~~
+ CategoryInfo:PermissionDenied:(System.ServiceProcess.ServiceController:ServiceController)[Set-Service],ServiceCommandException
+ FullyQualifiedErrorId:CouldNotSetService,Microsoft.PowerShell.Commands.SetServiceCommand

尝试此操作时出现权限错误。 有什么建议?

@seantma :PowerShell必须以管理员身份运行才能具有所需的权限。

除了添加上面的ssh config条目
如果窗户
设置服务ssh-agent -StartupType自动

在PowerShell中
现在vs代码不应该提示...

在我的情况下这没有帮助,当我尝试将本地提交与原点(远程)同步时,VCode返回以下错误:

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

看起来VCode不使用全局GIT配置(名称和电子邮件),可能吗?

做到了这一点并且它有效(未经带有密码短语的ssh密钥测试):

  • 在Visual Code中打开一个新终端,如果出现提示,请选择当前项目文件夹
  • VS将使用Poweshell打开终端
  • 运行ssh-keygen.exe-> Enter,然后输入....->在.ssh中在用户文件夹中创建的密钥(通常在C:\ Users \
  • 复制密钥的内容(.ssh / id_rsa.pub)并在Github设置上添加到新密钥

而已

@ leductan-nguyen,这不是适当的解决方案。 这个问题不仅是关于受密码保护的密钥的问题,而且如果您有多个密钥(例如我有一个用于GitHub的密钥和另一个用于GitLab的密钥),它也将不起作用。

这个有什么进展吗?

@Badbreaddead ,上面已经发布了一些解决方案或解决方法。 这取决于您使用的操作系统:

OS X

遵循@ dschu-lab的解决方案并添加

Host *
   AddKeysToAgent yes
   UseKeychain yes 

~/.ssh/config的_very end_。 如果您的ssh密钥没有标准名称,您可能还需要像其他人指出的那样用IdentityFile /path/to/your/ssh/private/key指定它。
首次使用时,系统会提示您添加密码,然后将其存储在钥匙串中以备后用。

的Linux

安装钥匙串,例如通过sudo apt install keychain ,如@ Silentz0r上面指出的那样。 然后,他执行keychain --eval <ssh-key-name> ,但似乎keychain <path-to-ssh-key>具有相同的效果。 将技巧添加到您的.bashrc或同等水平即可。

视窗

@geordanr解决方法是唯一对我有用方法。 在Git Bash中执行以下命令,以将ssh密钥添加到代理,并在同一会话中运行代码:

$ eval `ssh-agent`
$ ssh-add /path/to/key
$ code

如果您想节省自己不必每次都键入前两个命令,还可以添加以下内容:

#use fix path for SSH_AUTH_SOCK so it works more then one instance of gitbash
export SSH_AUTH_SOCK="$TEMP/ssh_agent_socket"

ps | grep ssh-agent > /dev/null
RUNNING=$?;

if [ "$RUNNING" -eq "1" ] 
then
# ssh-agent is not yet running
    eval `ssh-agent -a $SSH_AUTH_SOCK`
fi
ssh-add 

到您在Git Bash中的~/.bashrc文件中以自动启动ssh-agent(从此处获取并稍作调整)。 如果您的密钥没有标准名称,则需要在ssh-add之后指定其路径,例如ssh-add ~/.ssh/id_rsa_personal_key

哪个IDE实际支持SSH密码? 因为Jetbrains的产品也不是。 因此,您有3个最大的供应商中有2个不本地支持SSH密码(另外一个-Github-我只是不知道他们的Atom编辑器是否本地支持SSH密码)。

2019年8月29日,晚上8:43,克里斯·米古特@* >写道:由Visual Studio代码更新,无法再通过应用程序与我的github交互。 版本1.37.1 MS团队是否讨厌SSH? —您收到此邮件是因为有人提到您。 回复此电子邮件直接,查看它在GitHub <#13680?email_source =通知&email_token = ACKS4GSGFBF2OGBCXPN55LDQHB3NLA5CNFSM4CSXV3P2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5QI7ZA#issuecomment-526421988>,或静音螺纹https://github.com/notifications/unsubscribe-auth/ACKS4GTHNDBY5DETIRNVX6TQHB3NLANCNFSM4CSXV3PQ

PyCharm毫无疑问地支持带有密码短语的ssh密钥,它一次又一次地要求我提供密码短语,并且所有git功能均按预期运行。

在Git Bash中执行以下命令,以将ssh密钥添加到代理,并在同一会话中运行代码:

$ eval ssh-agent
$ ssh-add /路径/到/密钥
$代码

就其价值而言,它在Linux上也同样适用-无需通过终端启动code 。 快捷方式也可以。 在执行这些命令后,即可关闭终端本身。

我至少知道另一种解决方法:

安装ssh-askpass (拱Linux中,这是由两个提供X11-SSH-askpass以及还有海马包和二进制文件驻留在/usr/lib/ssh/ssh-askpass/usr/lib/seahorse/ssh-askpass分别地)。 仅需安装这些软件包之一。 每次需要时,VS Code都会启动密码对话框。

只需将以下键添加到您的环境中即可:

DISPLAY=needs-to-be-defined
SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass

我本可以宣誓这是2020年1月的里程碑。 😕

添加到此https://github.com/microsoft/vscode/issues/13680#issuecomment -559013132

这是因为bash每次登录时都会提示您键入密码,因此您可以通过bash以快捷方式链接运行VSCode。 对于图标,只需使用VSCode随附的图标,可能在%LOCALAPPDATA%\ Programs \ Microsoft VS Code \ Code.exe下

如果您已经在运行ssh-agent,它将立即启动代码。 如果没有,它将等待您输入密码。

image

我很乐意为您提供帮助。 这是我仍然希望VSCode做到的几件事之一,但是即使没有它也没关系,我仍然非常喜欢使用VSCode,所以谢谢!

您是否知道Windows的Git带有一个名为start-ssh-agent的脚本,该脚本位于cmd文件夹中,通常会在标准Windows的Git安装中添加到用户路径中。 也许有某种方式可以使用它来解决此问题?

我想知道是否有人可以指出单击链接时发生的一系列事件,也许我们可以尝试在vscode终端或弹出窗口中执行此脚本。

另外,作为附加功能,如果用户已经启动ssh-agent,脚本通常会找到它,并且只使用现有的代理,因此甚至不需要密码。

谢谢!

https://github.com/microsoft/vscode/issues/13680#issuecomment -525861890也为我工作,但这不是很简单,如果您还将Git用于Windows git和bash,则会使事情复杂化。

我对问题的发现以及可能的解决方案的摘要

Windows + Windows Git(GfW)+ VSCode + SSH git repo中的主要问题是:

  • 如果您之前没有启动Windows或GfW ssh-agent(或者没有帮助程序/服务),则它似乎无法启动ssh-agent和ssh-add。 也许这不是VSCode的责任,但是很高兴知道或提示ssh没有运行。
  • 如果确实通过.bashrc启动了GfW ssh代理,并且从“开始”菜单/快捷方式而不是同一会话中启动了VSCode(例如从cli运行code ),则VSCode不会得到以及访问GfW ssh代理。
  • 如果您确实启动了Windows版本的ssh-agent并安装了GfW,则默认情况下,GfW git不会使用Windows版本的ssh-agent,因为它也带有自己的ssh工具版本。 VSCode似乎在可用时使用GfW git,因此这可能就是为什么它没有检测到Windows ssh-agent已在运行(带有添加的键)并使用它的原因。

    • 如果您不介意使用Windows OpenSSH工具,请执行以下解决方案: https :

解决方案2不错,但也不是超级直截了当,这些是我采取的步骤:

  1. 在可选功能下安装OpenSSH Client
  2. 在环境变量中添加GIT_SSH,指向OpenSSH Client工具,可能是C:\ Windows \ System32 \ OpenSSHssh.exe
  3. 将“服务”下的“打开SSH代理”切换为“自动”(如果已禁用,则为“我的”)
  4. 在PowerShell中运行ssh-add ,您应该看到已添加密钥
  5. VSCode现在应该可以通过SSH存储库执行git了
  6. 但是,GfW git和bash不使用此代理(我尝试将bash env GIT_SSH指向Windows OpenSSH工具,但它们拒绝一起工作),因此您必须使用.bashrc脚本来启动代理并输入密码下次启动GfW bash时。

目前,我坚持使用解决方案1,因为我也使用Mac和Linux系统,并且在任何地方都可以使用相同的bash / git / ssh工具真是太好了。

我试图链接在一起的Git换的Windows脚本调用start-ssh-agent.cmd在CMD文件夹,用Code.exe在快捷为%COMSPEC% /C %LOCALAPPDATA%\Programs\Git\cmd\start-ssh-agent.cmd && "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe"和它的作品,但它有这个奇方退出第一个实例后打开第二个VSCode实例的效果,但是我不知道为什么。

如果我从Windows终端执行此行(无论是否带有前面的%COMSPEC% /C ),它都可以正常工作。

我尝试的另一件事是使用与快捷方式相同的命令创建*.bat*.cmd文件,但是令我惊讶的是它没有用。 VSCode启动,但无法拉/推,并以可怕的“权限被拒绝(公钥)”响应。 错误。

我还花了一些时间在Git扩展代码库中进行搜索,但我不知道在哪里插入ssh-start-agent脚本,理想情况下,当它正在寻找Git的版本并发现它在Windows上时,例如第61-148行在git.ts运行,因为它可以运行git --version它也可以运行cp.exec('start-ssh-agent.cmd')但是它必须要有一种从用户那里获取密码的方法。

最后,我决定将start-ssh-agent.cmd复制到名为vscode-ssh-agent.cmd的新文件中,并用CMD <strong i="25">@call</strong> "%LOCALAPPDATA%\Programs\Microsoft VS Code\Code.exe" 但是我无法将其固定在任务栏上。

我目前正在尝试实现此功能。 这项工作仍在进行中,但我应该尽快提供PR。

现在,我启动一个ssh-agent,如果设置了git.sshPrivateKeyPath,则添加用户密钥,如果要求,则提示用户输入其SSH密钥密码,并为每个git调用使用代理的环境变量。
我在Windows机器上的第一个测试似乎可以正常工作。

我在这里阅读了所有评论,但可能忘记了一些内容,因此请随时发表任何评论。

从@weiliddat添加到https://github.com/microsoft/vscode/issues/13680#issuecomment -583599355; 我本人经常使用“使用VSCode打开”上下文菜单(右键单击文件夹)条目,当使用VSCode打开文件夹以通过Git Bash启动它时,我使用ContextEdit编辑上下文菜单条目,因此VSCode可以访问SSH上下文。

  1. 安装ContextEdit
  2. 以管理员身份运行ContextEdit
  3. 在扩展名的长列表中找到“文件夹”。
    image
  4. 双击“ Shell命令”下的“打开带有代码的代码”条目
  5. 将“命令行”字符串更改为"C:\Program Files\Git\bin\bash.exe" -l -c "code '%V';exit" 。 确保"C:\Program Files\Git\"与Windows的Git安装目录相对应。 您可能需要复制旧命令,以防需要重置。
  6. 点击“确定”和“退出”

现在,如果右键单击文件夹以“使用VSCode打开”,则应首先启动Git Bash,然后在正确的文件夹中打开VSCode。 如果您已正确设置Git Bash以在启动Git Bash之前启动SSH代理,这将提示您在每次重新启动计算机时键入一次密码。 在随后的打开中,应该直接打开VSCode并设置所有SSH密钥。

在资源管理器中的文件夹内单击鼠标右键时,而不是在文件夹本身上单击鼠标右键,我找不到ContextEdit条目。

该解决方案就像一个魅力。

只需将以下键添加到您的环境中即可:

DISPLAY=needs-to-be-defined
SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass

只需将以下键添加到您的环境中即可:

DISPLAY=needs-to-be-defined
SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass

https://github.com/microsoft/vscode/issues/13680#issuecomment -575204695
解决了! 非常感谢你!

请检查此部分。 简而言之,它表示您需要从GitBash或类似的字符开始VSCode ,以获取所需的环境变量。 另外,如果您在GitBash检查了这些变量,则可能会得到以下内容:

例如,如果您不想每次都不使用GitBash来启动VSCode因为这是胡说!恕我直言),则可以使用Environment Variables窗口或使用命令来添加它们rundll32.exe sysdm.cpl,EditEnvironmentVariables (即通过cmd.exe)。

结果可能是这样的:

现在,只需重新启动(而不是重新加载) VSCode ,它应该可以工作:

有趣的是,即使DISPLAY=WTHeck也可以工作,因此,它可能仅查找此变量的存在。

为什么不只是简单地将这些( private key file pathSSH_ASKPASS )定义为JSON配置值作为解决方法,所以VSCode将在启动时将其附加到其内部环境变量?

我对电子或Windows应用程序的工作方式不是很熟悉,但是可以围绕该解决方案开发包装器,因此在安装VSCode时,它将自动配置这些设置。

TBH在我看来,这似乎并不是一个解决难题的难题,但是考虑到这种讨论已经持续了4年了,这可能是一个问题。 看到VSCode至少实现某些功能,这样用户就可以使用此相当标准的git功能,而不必自己解决,这很酷。 尽管我认为有必要在第一次正确实施它。

感谢soufiene-slimi您的解决方法,也感谢F8ER的澄清。 虽然UI不一致,但至少可以正常工作

只需将以下键添加到您的环境中即可:

DISPLAY=needs-to-be-defined
SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass

这里有什么新东西吗? 我刚刚开始在WSL 2和Git上使用VSCode。 而且由于VSCode每次尝试推送或发布内容时都会出现问题,因此我在终端上进行了尝试,并且效果很好,因为可以输入密码了。

这个问题太老了,有很多评论。 也许某个地方是一个不错的解决方法,而无需从我的密钥中删除密码短语,也无需在配置中的某个位置保存密钥。

大家好,

我也在Mac上也遇到了这个问题。
我已经设置了RSA密钥,并且我的配置如下所示

# GitLab.com
Host gitlab.com
  Preferredauthentications publickey
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

事情是从VS代码终端开始的,当我使用CLI推送到源时,它成功地在提示输入密码的情况下推送了我的代码。
当我使用VScode GUI的pull / push / sync时,就会出现问题

Please make sure you have the correct access rights
and the repository exists.
> git push -u origin v1.5_Testing
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

唯一的区别是GUI不会提示输入密码,这就是我假设密码失败的原因。

[email protected] :权限被拒绝(公钥)。
...
唯一的区别是GUI不会提示输入密码,这就是我假设密码失败的原因。

@mohammedpatla请检查

使用环境变量的解决方案对我没有帮助。 我没有在Windows上安装git,但在WSL2上运行的Ubuntu 20.04上安装了git。 在任何地方都没有目录mingw64或二进制文件git-gui--askpass

因此,我也认为该解决方案也不能在Mac上使用@ F8ER

我无法在Mac @ F8ER上通过git-bash运行

使用环境变量的解决方案对我没有帮助。 我没有在Windows上安装git,但在WSL2上运行的Ubuntu 20.04上安装了git。 在任何地方都没有目录mingw64或二进制文件git-gui--askpass

我无法在Mac上通过git-bash运行VScode

您知道什么是Environment Variable吗?
@NicolasGoeddel您可能想从ubuntu.com检查此
@mohammedpatla您可能想改为从apple.com检查此

也。 请先尝试Google 。 例如,缺少git-gui--askpass可能意味着没有安装软件包git-gui ,因此,您可能需要安装它。

使用环境变量的解决方案对我没有帮助。 我没有在Windows上安装git,但在WSL2上运行的Ubuntu 20.04上安装了git。 在任何地方都没有目录mingw64或二进制文件git-gui--askpass

我无法在Mac上通过git-bash运行VScode

您知道什么是Environment Variable吗?
@NicolasGoeddel您可能想从ubuntu.com检查此
@mohammedpatla您可能想改为从apple.com检查此

也。 请先尝试Google 。 例如,缺少git-gui--askpas可能意味着没有安装软件包git-gui

我当然知道什么是环境变量。 但是,当无法运行该GUI时,为什么要在运行WSL2的Linux机器上安装GUI应用程序呢? 在无头机器上根本不可能。 下次请仔细阅读我的帖子。

在我的情况下,这种git-gui技巧不是正确的解决方法。 但是,如果VSCode和存储库在同一环境中本机运行,则也许可以在Mac上运行。 然后, @ mohammedpatla只需在其系统上安装git-gui ,并且需要更改环境变量。

我当然知道什么是环境变量。 但是,当无法运行该GUI时,为什么要在运行WSL2的Linux机器上安装GUI应用程序呢? 在无头机器上根本不可能。
在我的情况下, git-gui技巧不是正确的解决方法。

那么,为什么要尝试在非GUI机器上运行VSCode?或者我缺少某些东西?
另外,您可能想看看这个

不管我如何启动vscode,在我的Mac上都能正常运行,但是我启用了ssh-agent并将其连接到我的证书钥匙串,因此它会自动启动。

我没有尝试从WSL中拉/推,但我确实使用了疫苗远程连接。 我可以使用VcXsrv从WSL运行

ssh代理是否已在您的WSL中​​启动? 启动您的WSL终端,然后查看.bashrc.bash_prifile (如果主文件夹中存在它们)。 然后加:

eval `ssh-agent`
ssh-add

也许会有所帮助,但可能不会。 使用wsl时,我发现有些东西根本不起作用。 保持终端处于打开状态并手动同步获得的存储库

我认为这太过分了,不是吗? 我们已经有了解决方法。 正确的解决方案是让VS Code在本地提示输入密码,其方式与普通用户名/密码通过的方式相同。

/ cc @ alarr46 ,你说什么?

我当然知道什么是环境变量。 但是,当无法运行该GUI时,为什么要在运行WSL2的Linux机器上安装GUI应用程序呢? 在无头机器上根本不可能。
在我的情况下, git-gui技巧不是正确的解决方法。

那么,为什么要尝试在非GUI机器上运行VSCode?或者我缺少某些东西?
另外,您可能想看看这个
你误解我了。 VSCode在Windows上运行,而我开发的应用程序及其源代码在WSL 2上运行。
但是,谢谢您的链接。 我不知道在Windows和WSL之间共享Git凭据。 我会测试一下。

另一方面, @ ranolfi是正确的。 所有这些仍然是解决方法。 最好解决整个问题。 :-)

是的,我也希望本机也可以将此实现到VSCode中。 提示将不胜感激。

只需将以下键添加到您的环境中即可:

DISPLAY=needs-to-be-defined
SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass

在问自己是否在双破折号之前应该有一个空格之前,应该没有空格。 它似乎应该是一个参数,但我相信它实际上是一个文件名...没有空格

只需将以下键添加到您的环境中即可:

DISPLAY=needs-to-be-defined
SSH_ASKPASS=/mingw64/libexec/git-core/git-gui--askpass

在问自己是否在双破折号之前应该有一个空格之前,应该没有空格。 它似乎应该是一个参数,但我相信它实际上是一个文件名...没有空格

我认为这太过分了,不是吗? 我们已经有了解决方法。 正确的解决方案是让VS Code在本地提示输入密码,其方式与普通用户名/密码通过的方式相同。

/ cc @ alarr46 ,你说什么?

只是要等待正式发布,才可以使用Git-CLI。

我认为这太过分了,不是吗? 我们已经有了解决方法。 正确的解决方案是让VS Code在本地提示输入密码,其方式与普通用户名/密码通过的方式相同。

/ cc @ alarr46 ,你说什么?

我同意,这就是我在此pull request中实现的。 虽然它仍然需要进行审查。

我同意,这就是我在此pull request中实现的。 虽然它仍然需要进行审查。

很好的开始。 非常感谢你! 火箭。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

shanalikhan picture shanalikhan  ·  3评论

lukehoban picture lukehoban  ·  3评论

omidgolparvar picture omidgolparvar  ·  3评论

biij5698 picture biij5698  ·  3评论

curtw picture curtw  ·  3评论