使用Visual Studio 2017通过SSH连接到Git存储库

Tri*_*ibo 14 git ssh visual-studio-2017

我正在尝试使用Visual Studio 2017中的SSH连接到Git存储库(在Bitbucket上)(据我所知,它支持用于Git的SSH).我已经设置了所有东西,将存储库克隆到我的计算机上,然后我可以提交,但是如果我尝试执行某些操作,则会使用以下消息(来自Visual Studio的"输出"窗口)失败:

Error encountered while fetching: Git failed with a fatal error.
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)

从命令提示符尝试它,我得到这些稍微提供信息的消息:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)

从Git Bash我尝试打开SSH代理,添加我的私钥和获取,它似乎工作(或者至少我没有得到任何消息,不像代理未启动或未添加密钥):

eval `ssh-agent`
ssh-add ~/.ssh/xxxx
git fetch
Run Code Online (Sandbox Code Playgroud)

但是Visual Studio仍然无法连接.我也尝试从Windows命令提示符执行相同的操作:

ssh-agent
set SSH_AUTH_SOCK=/tmp/ssh-SIAryCa61iz9/agent.11128
set SSH_AGENT_PID=9804
ssh-add xxxx
git fetch
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.

我已经将公钥添加到Bitbucket,并ssh -T git@bitbucket.org输出"以xxxx登录".此外,我可以使用SourceTree正确连接并将私钥添加到Pageant(我使用的密钥ssh-add具有所需的OpenSSH格式,我是从.ppk格式创建的).

Tri*_*ibo 19

我终于设法让它工作,使用PuTTY的Pageant身份验证代理而不是ssh-agent,并遵循这里提到的步骤(它适用于Visual Studio Code,但适用于Visual Studio 2017,我想它应该适用于使用"官方"的任何应用程序Git for Windows).

由于我已经安装了Pageant并且创建了一个.ppk私钥,我只需要让Git使用Pageant,通过创建GIT_SSHWindows环境变量并将其设置为"plink.exe"文件的路径(在PuTTY安装中,例子C:\Program Files (x86)\PuTTY\plink.exe).完成后,我只需要打开Pageant并添加私钥(并在使用存储库时保持打开状态),Visual Studio将能够正常连接和发出命令.


Rav*_*ven 7

还有另一种方法对我有用。

  1. 使用另一个ssh客户端(例如ssh.exe)连接到Git存储库。接受连接。它将生成k​​nown_hosts文件。
  2. known_hostsid_rsa文件复制到C:\ Users \ [UserName] \。ssh \
  3. 做完了 即使没有start-ssh-agent。

似乎VS2017自行运行ssh连接,因此它会忽略ssh-add添加的密钥,而仅使用默认路径的密钥

  • 这似乎是最简单的解决方案,我在Windows的Ubuntu上使用Bash复制了文件:cp〜/ .ssh / * / mnt / c / Users / [我的用户] /。ssh / (2认同)

Ser*_*nov 6

这是一个解决方案,它允许通过 SSH 将 Visual Studio(和 Git)连接到多个存储库,必要时使用单独的私钥和 ssh 身份验证代理来处理密钥的密码。

这对企业用户很有好处,因为您不需要计算机的管理员权限来执行以下步骤。

它在 Bitbucket 的示例中进行了解释,但可以扩展到 Github 和其他任何东西。

先决条件

  • 已安装的 Visual Studio
  • 比特桶账户

下载并安装 Git

在打开一个项目时,Visual Studio 会要求您下载并安装 Git 包。您可以使用 Visual Studio 通知中提供的链接或使用此链接来执行此操作。

仅为当前用户安装 Git。默认情况下使用安装选项。

生成您的私钥/公钥对

  1. 找到带有 ssh-keygen.exe 应用程序的 Git 文件夹。默认为: “%LOCALAPPDATA%\Programs\Git\usr\bin\” 例如: “C:\Users\NSM\AppData\Local\Programs\Git\usr\bin\”
  2. 打开命令提示符并进入您找到的文件夹:

    cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个文件夹来存储您的密钥(如果它不存在)

    mkdir "%HOME%\.ssh"
    
    Run Code Online (Sandbox Code Playgroud)
  4. 生成新的 ssh 密钥:

    ssh-keygen -t rsa -b 4096 -C "<your email of id>" -f "%HOME%/.ssh/id_rsa_<file name>"
    
    Run Code Online (Sandbox Code Playgroud)

    例如:

    ssh-keygen -t rsa -b 4096 -C "nsm" -f "%HOME%/.ssh/id_rsa_nsm"
    
    Run Code Online (Sandbox Code Playgroud)

    建议指定他们的密钥密码。记住密码,忘记了就找不回来了!

将您的公钥添加到 Bitbucket

  1. 打开您的 Bitbucket 账户管理页面
  2. 打开SSH 密钥部分,然后单击添加密钥
  3. “%HOME%/.ssh/”文件夹复制并粘贴生成的公钥的内容。例如:id_rsa_nsm.pub ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
  4. 单击添加密钥按钮提交您的公钥

配置 ssh 以将您的密钥用于 Bitbucket 源代码请求

“%HOME%/.ssh/”文件夹中创建配置文件,内容如下:

    AddKeysToAgent yes

    Host <Bitbucket FQDN or any label>
      HostName <Bitbucket FQDN>
      User git
      IdentityFile ~/.ssh/id_rsa_<file name>
Run Code Online (Sandbox Code Playgroud)

例如:

    AddKeysToAgent yes

    Host <Bitbucket FQDN or any label>
      HostName <Bitbucket FQDN>
      User git
      IdentityFile ~/.ssh/id_rsa_<file name>
Run Code Online (Sandbox Code Playgroud)

输出:

    AddKeysToAgent yes

    Host bitbucket.org
      HostName bitbucket.org
      User git
      IdentityFile ~/.ssh/id_rsa_nsm
Run Code Online (Sandbox Code Playgroud)

AddKeysToAgent yes选项将根据需要将配置的私钥添加到 ssh 身份验证代理

配置 Git 使用 ssh 身份验证代理

每次使用私钥时都要输入密码是一种乏味的负担。为了避免这种情况,我们将使用 ssh 身份验证代理

  1. 在找到 ssh-keygen 实用程序的文件夹中(默认为: "%LOCALAPPDATA%\Programs\Git\usr\bin\"),创建包含以下内容的ssh.cmd文件:

        cd %HOME%/.ssh/
        type config
    
    Run Code Online (Sandbox Code Playgroud)

    该脚本将在执行 ssh.exe 之前加载 ssh 身份验证代理,并允许 ssh.exe 通过 SSH_AUTH_SOCK 环境变量中指定的套接字与其通信。

  2. 从命令提示符执行以下命令:

        AddKeysToAgent yes
    
        Host bitbucket.org
          HostName bitbucket.org
          User git
          IdentityFile ~/.ssh/id_rsa_nsm
    
    Run Code Online (Sandbox Code Playgroud)

使用 Bitbucket 提供的链接为您的本地存储库创建远程

将链接中的 FQDN 替换为您在./ssh/config文件中提供的标签。这将允许您在连接到 Bitbucket 或 Github 存储库时使用具有多个键的配置部分

全部完成