如何使用带密码的 SSH 密钥让 Visual Studio Code 访问 Bitbucket

Jer*_*amy 5 git bitbucket visual-studio-code vscode-settings

我有一个个人和专业的 Bitbucket 帐户。我可以通过 Git 命令行访问两者,但无法在 Visual Studio Code GUI 界面中使用专业帐户。

这两个账户的区别在于,我的专业账户在 SSH 密钥上有一个密码短语,并在我访问远程 repo 时提示我输入密码。我无法让 Visual Studio Code 提示我输入密码。

当我尝试使用 GUI 界面并推/拉我的更改时: 在此处输入图片说明

我收到一条错误消息“Git: git@bitbucket.org: Permission denied (publickey)”。 在此处输入图片说明

git 日志输出显示:

在此处输入图片说明

但是,如果我跳入集成终端并 'git push' 它是成功的: 在此处输入图片说明

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

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

我已按照https://code.visualstudio.com/docs/remote/troubleshooting 上提供的说明将"remote.SSH.showLoginTerminal": true,和添加"remote.SSH.useLocalServer": false到 VS Code settings.json这没有影响。

我添加了远程开发扩展包并按照https://code.visualstudio.com/docs/remote/ssh 上的说明进行操作,但由于 Bitbucket shell 访问被禁用而无法完成它们

我已经尝试AddKeysToAgent yes按照另一篇文章中的建议添加到 .ssh/config 文件的顶部。这没有改变任何东西。

我已经尝试过,git config --global credential.helper cache但它看起来只适用于 HTTPS,而不适用于 SSH。

尽管我已经尝试了所有,VS Code 仍然无法与上述错误连接。我可以从密钥中删除密码,它工作正常,但我想让它与密码一起工作。

我错过了什么?

小智 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
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 macOS 和 Linux,并且想要减少输入密码或令牌的频率,您可以ControlMaster本地计算机上启用该功能,以便 OpenSSH 通过单个连接运行多个 SSH 会话。

启用ControlMaster

  1. 将如下条目添加到您的 SSH 配置文件中:

    Host *
        ControlMaster auto
        ControlPath  ~/.ssh/sockets/%r@%h-%p
        ControlPersist  600
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后运行mkdir -p ~/.ssh/sockets创建sockets文件夹。

设置 SSH 代理

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

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

视窗:

要在 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
Run Code Online (Sandbox Code Playgroud)

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

Linux:

要在后台启动 SSH 代理,请运行:

eval "$(ssh-agent -s)"
Run Code Online (Sandbox Code Playgroud)

要在登录时自动启动 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
Run Code Online (Sandbox Code Playgroud)

苹果系统:

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

2020年10月8日