我正在远程使用 VSCode 进入位于 WSL 2 VM 中(符号链接)的项目文件夹。我使用 SSH 和终端从 Bitbucket 克隆了我的存储库。
在左下角,它指示
WSL: Ubuntu
,所以我目前正在远程使用它。一切都好问题是当我在本地提交后单击同步所有内容时,它会永远旋转。好吧,不是真的,我在永远发生之前失去了耐心......目前当前测试大约 30 分钟。
如果我
git push
进入终端,一切都会按预期进行。
有人知道为什么要这样做吗?我该如何解决这个问题?
我的 Git 输出到 VSCode 中不断返回这个
git rev-parse --show-toplevel
?git config
谢谢你
2021-02-05 更新
这个问题最近得到了很多人的关注,我觉得我需要给出更彻底的解释。最初的答案是在 WSL 2 仍处于测试阶段时编写的。现在一切都已发展,从 SSH 密钥中删除密码可能会导致一些漏洞。因此,在进一步讨论之前,请先看一下这篇文章 可以使用带有空密码的 SSH 密钥吗?
问问自己删除它是否安全。
不知道原来的问题是否还有问题。在我写完这个问题后不久,我就放弃了 WSL for Web dev。
原答案
我解决了我的问题。因此,对于那些想要尝试 WSL 2 并遇到此问题的人来说,问题在于 SSH 密钥的密码。
解决在 SSH 主机上执行 Git 推送或同步时挂起的问题
如果使用 SSH 克隆 Git 存储库并且 SSH 密钥有密码,则 VS Code 的拉取和同步功能可能会在远程运行时挂起。
使用不带密码的 SSH 密钥、使用 HTTPS 克隆或从命令行运行 git push 来解决该问题。
如果您想删除密码,请使用此问题中提到的
$ ssh-keygen -p
:https://stackoverflow.com/a/112409/5543999
您还可以使用 ssh-agent 来解决此问题。
将以下内容添加到您的 ~/.bashrc 中,每当您打开终端时,系统都会提示您解锁密钥(如果未解锁)。
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env
此外,您可以按如下方式配置添加到 ssh-agent 的密钥的过期时间 - https://unix.stackexchange.com/questions/122511/configuring-the-default-timeout-for-the-ssh-agent
宁愿从命令行进行推送和拉取,也不愿删除密码!
将您添加到 VS Code 中的 Github 相关扩展一一删除。然后你就会看到它工作了。
在这种情况下,删除密码是最简单的选择,但您也可以查看相关问题:
microsoft/vscode-remote-release
问题2369
它包括由 Elsie Hupp 发现的最近的解决方法(2021 年 2 月):
我找到了一个潜在的解决方法:SSH 代理转发。
在 SSH 配置中,对于远程 VS Code 主机,添加以下内容:
ForwardAgent yes
(缩进很重要。)
对我来说,使用 VS Code 设置为 SSH 的主机称为 alpha,因此文件的部分如下所示:
Host alpha ForwardAgent yes
如果您想对所有远程主机执行此操作,您可以将其添加到
部分(尽管这显然是一个边际安全风险):Host *
Host * ForwardAgent yes
它的作用是使用您用来连接到远程主机的 SSH 代理,并为来自远程的任何 SSH 连接(例如连接到 Git)回收 SSH 密钥。
因为当您连接到 VS Code 远程时,VS Code 会很高兴地提示您输入 SSH 密钥的密码,因此您可以在初次连接时输入密码,而无需在与 Git 交互时重新输入。显然,在代理转发时您可以使用多个本地 SSH 密钥,但我无法对此进行测试。一般来说,我还无法测试这一点,但它似乎很有希望。
alexisbg 在同一期中添加 :
为了解决这个问题,我为
创建了一个包装器,我想分享:ssh-add
。ssh-agent-add-id
它不会每次都提示输入密码,而是检查密钥是否已添加到 SSH 代理。
它可以与打开工作区时触发的 VS Code 任务集成,使用
属性。"runOn": "folderOpen"
如果需要,它将在新的终端面板中提示输入密码。
如果没有,面板将自动关闭。