如何使用SSH密钥及密码让Visual Studio Code访问Bitbucket?

6
我有一个个人和专业的Bitbucket账户。我能够通过Git命令行访问两个账户,但无法从Visual Studio Code GUI界面访问专业账户。
两个账户之间的区别是我的专业账户在SSH密钥上有一个口令,并在我访问远程repo时提示我输入。我无法让Visual Studio Code提示我输入口令。
当我尝试使用GUI界面推送/拉取我的更改时: enter image description here 我收到一个错误信息:“Git: git@bitbucket.org: Permission denied (publickey).” enter image description here git日志输出如下:

enter image description here

但是,如果我在终端中输入“git push”,则会成功: enter image description here

我已经阅读了很多不同的方法来解决这个问题,但没有一个看起来能够解决。

我已经运行了ssh-agent。我已经将密钥添加到代理中。ssh-add -L 显示已加载的密钥。

我已经根据https://code.visualstudio.com/docs/remote/troubleshooting提供的指示,在VS Code settings.json中添加了"remote.SSH.showLoginTerminal": true,"remote.SSH.useLocalServer": false。但是没有影响。

我已经添加了Remote Development扩展包,并按照https://code.visualstudio.com/docs/remote/ssh上的说明进行了操作,但由于Bitbucket shell访问被禁用,因此未能完成操作。

我尝试在 .ssh/config 文件的顶部添加 AddKeysToAgent yes,如另一篇文章中推荐的那样。但这并没有改变任何事情。
我尝试了 git config --global credential.helper cache,但看起来它只适用于 HTTPS,而不是 SSH。
尽管我尝试了所有方法,但 VS Code 仍然无法连接,并显示上述错误。我可以从密钥中删除密码,这样就可以正常工作,但我想让它使用密码。
我错过了什么?

嘿,你解决了吗?我遇到了类似的问题。它一开始工作了一会儿,然后就停止了。 - koubin
@koubin 我也是,有解决方案吗? - tigrenok00
@tigrenok00 我已经切换到https。 - koubin
我最终从我的 BitBucket 密钥中删除了密码。下次更新密钥时,我打算尝试重新添加它,看看在 VSCode 中是否已经修复了它,但考虑到你的回复,似乎并没有。 - Jeramy
1个回答

2

这可能会有所帮助。从vs code文档“远程开发技巧和技巧”中获取:

https://code.visualstudio.com/docs/remote/troubleshooting

启用备用SSH身份验证方法

如果您正在连接到一个SSH远程主机,并且要么:

  • 使用双因素身份验证连接
  • 使用密码身份验证
  • 在SSH代理未运行或无法访问时使用带有密码短语的SSH密钥

那么VS Code应自动提示您输入所需信息。如果您没有看到提示,请在VS Code中启用remote.SSH.showLoginTerminal设置。此设置在VS Code运行SSH命令时显示终端。然后,当终端出现时,您可以输入身份验证代码、密码或密码短语。

如果您仍然遇到问题,则可能需要在settings.json中设置以下属性并重试:

"remote.SSH.showLoginTerminal": true,
"remote.SSH.useLocalServer": false

如果你使用的是macOS或Linux系统,并且希望减少输入密码或令牌的频率,你可以在本地机器上启用“ControlMaster”功能,以便OpenSSH在单个连接上运行多个SSH会话。
要启用“ControlMaster”,请按照以下步骤操作:
  1. Add an entry like this to your SSH config file:

    Host *
        ControlMaster auto
        ControlPath  ~/.ssh/sockets/%r@%h-%p
        ControlPersist  600
    
  2. Then run mkdir -p ~/.ssh/sockets to create the sockets folder.

设置SSH代理

如果您使用带有密码短语的密钥连接到SSH主机,则应确保在本地运行SSH代理。VS Code将自动将您的密钥添加到代理中,因此每次打开远程VS Code窗口时都不必输入密码短语。

要验证代理是否正在运行并且可以从VS Code的环境中访问,请在本地VS Code窗口的终端中运行ssh-add -l。您应该会看到代理中的密钥列表(或者是没有密钥的消息)。如果代理没有运行,请按照以下说明启动它。启动代理后,请务必重新启动VS Code。

Windows:

要在Windows上自动启用SSH代理,请启动本地管理员PowerShell并运行以下命令:

# Make sure you're running as an Administrator
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

现在代理将会在登录时自动启动。

Linux:

要在后台启动SSH代理,请运行以下命令:

eval "$(ssh-agent -s)"

为了在登录时自动启动SSH代理,请将以下内容添加到您的~/.bash_profile文件中:

if [ -z "$SSH_AUTH_SOCK" ]; then
   # Check for a currently running instance of the agent
   RUNNING_AGENT="`ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'`"
   if [ "$RUNNING_AGENT" = "0" ]; then
        # Launch a new instance of the agent
        ssh-agent -s &> .ssh/ssh-agent
   fi
   eval `cat .ssh/ssh-agent`
fi

macOS:

默认情况下,代理应该在macOS上运行。

2020年10月8日


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接