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

标签 git visual-studio-code bitbucket vscode-settings

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

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

当我尝试使用 GUI 界面并推/pull 我的更改时:
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 正在运行。我已将 key 添加到代理中。 ssh-add -L显示加载的 key 。

我已添加 "remote.SSH.showLoginTerminal": true,"remote.SSH.useLocalServer": false按照 https://code.visualstudio.com/docs/remote/troubleshooting 上提供的说明转到 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 仍然无法与上述错误连接。我可以从 key 中删除密码,它工作正常,但我想让它与密码一起工作。

我错过了什么?

最佳答案

这可能会有所帮助。来自 vs 代码文档“远程开发技巧和窍门”
https://code.visualstudio.com/docs/remote/troubleshooting
启用备用 SSH 身份验证方法
如果您连接到 SSH 远程主机并且是:

  • 连接双因素身份验证
  • 使用密码认证
  • 当 SSH 代理未运行或不可访问时,使用带有密码短语的 SSH key

  • 那么 VS Code 应该会自动提示你输入需要的信息。如果没有看到提示,请启用 remote.SSH.showLoginTerminal setting在 VS 代码中。每当 VS Code 运行 SSH 命令时,此设置都会显示终端。然后,您可以在终端出现时输入您的身份验证代码、密码或密码。
    如果您仍然遇到问题,您可能需要在 settings.json 中设置以下属性并重试:
    "remote.SSH.showLoginTerminal": true,
    "remote.SSH.useLocalServer": false
    
    如果您使用的是 macOS 和 Linux 并希望减少输入密码或 token 的频率,您可以启用 ControlMaster您的 上的功能本地机以便 OpenSSH 通过单个连接运行多个 SSH session 。
    启用 ControlMaster :
  • 将这样的条目添加到您的 SSH 配置文件中:
    Host *
        ControlMaster auto
        ControlPath  ~/.ssh/sockets/%r@%h-%p
        ControlPersist  600
    
  • 然后运行 ​​mkdir -p ~/.ssh/sockets创建套接字文件夹。

  • 设置 SSH 代理
    如果您使用带密码的 key 连接到 SSH 主机,则应确保 SSH Agent正在运行 本地 . VS Code 会自动将您的 key 添加到代理,因此您不必每次打开远程 VS Code 窗口时都输入密码。
    要验证代理是否正在运行并且可以从 VS Code 的环境访问,请运行 ssh-add -l在本地 VS Code 窗口的终端中。您应该会看到代理中的 key 列表(或没有 key 的消息)。如果代理未运行,请按照以下说明启动它。启动代理后,一定要重启VS Code。
    window :
    要在 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 上运行。
    10/8/2020

    关于git - 如何使用带密码的 SSH key 让 Visual Studio Code 访问 Bitbucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61901874/

    相关文章:

    git - 如何查找最后提交的用户名和远程分支的详细信息

    git - 将 Heroku 与 git repo 同步的最佳方式?

    git - 浅克隆的局限性是什么

    git - 在 git 中重新定位功能分支后 merge

    visual-studio-code - 在带有 makefile 的 VSCODE 中使用英特尔 Fortran 编译器 - `make: ifort: Command not found`

    javascript - 如何设置VSCode将花括号放在新行上?

    git - Jupyter 笔记本 + bitbucket 中的 pull 请求

    rebase后git分支出现分歧

    git - 提交前显示 git 的压缩提交大小

    html - 在 Angular 项目中格式化 HTML。强制 vscode 中的 wrapAttributes 仅适用于 Angular 组件标签