使用 Visual Studio 2017 通过 SSH 连接到 Git 存储库
Connect to Git repository with SSH using Visual Studio 2017
我正在尝试使用 Visual Studio 2017 年的 SSH 连接到 Git 存储库(在 Bitbucket 上)(据我所知,Git 支持 SSH) .我已经设置好所有内容,在我的计算机上克隆了存储库,并且我可以提交,但是如果我尝试执行诸如获取之类的操作,它会失败并显示以下消息(来自 Visual Studio 的 "Output" window):
Error encountered while fetching: Git failed with a fatal error.
fatal: Could not read from remote repository.
在命令提示符下尝试,我得到了这些信息量稍大的消息:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
来自 Git Bash 我试过打开 SSH 代理,添加我的私钥,然后抓取,它似乎有效(或者至少我没有收到任何消息,不像当代理未启动或密钥未添加时):
eval `ssh-agent`
ssh-add ~/.ssh/xxxx
git fetch
但是Visual Studio还是连接不上。我也尝试在 Windows 命令提示符下做同样的事情:
ssh-agent
set SSH_AUTH_SOCK=/tmp/ssh-SIAryCa61iz9/agent.11128
set SSH_AGENT_PID=9804
ssh-add xxxx
git fetch
但我仍然得到同样的错误。
我已经将 public 密钥添加到 Bitbucket,ssh -T git@bitbucket.org
会输出 "logged in as xxxx"。此外,我可以使用 SourceTree 正确连接并将私钥添加到 Pageant(我用于 ssh-add
的密钥具有所需的 OpenSSH 格式,我是从 .ppk 创建的)。
我终于成功了,使用 PuTTY 的 Pageant 身份验证代理而不是 ssh-agent
,并按照提到的步骤 here(它用于 Visual Studio 代码,但适用于 Visual Studio 2017,我想它应该适用于任何使用 "official" Git for Windows).
的应用程序
因为我已经安装了 Pageant 并创建了一个 .ppk 私钥,我只需要通过创建 GIT_SSH
Windows 环境变量并设置它来让 Git 使用 Pageant到 "plink.exe" 文件的路径(在 PuTTY 安装中,例如 C:\Program Files (x86)\PuTTY\plink.exe
)。完成后,我只需要打开 Pageant 并添加私钥(并在使用存储库时保持打开状态),Visual Studio 将能够正常连接和发出命令。
还有另一种方法,适合我。
- 连接到 Git 存储库使用另一个 ssh 客户端,例如 ssh.exe。接受连接。它将生成 known_hosts 文件。
- 复制known_hosts和id_rsa文件到C:\Users\[UserName]\.ssh \
- 完成。即使没有 start-ssh-agent.
似乎是 VS2017 运行 ssh 连接本身,所以它忽略了 ssh-add 添加的密钥,只使用默认路径的密钥
这种方式对我有用(VS 2017 / Win7):
- 我安装了 git-scm 并与之连接。
- 完成(无需复制,它只是有效)
在 VS2017 中
我有同样的problem.i尝试了一些解决方法:
- 在 Visual Studio 安装程序中删除了 "git for windows",并在控制面板
中删除了 git
- 安装了两个。
- 尝试了一些 ssh 设置
但没有解决我的问题。
然后我打开"Visual Studio Installer"和修复。它解决了。
好吧,我找不到使用 VS 2017 配置 Git 存储库的直接方法,因为克隆选项只接受 URI 而不是 SSH。
我做了以下事情:
- 使用 Git Bash 生成了 SSH 密钥,并将 Git 服务器与 Git bash 生成的密钥同步。您应该在“设置”下提供 public 键。
- 下载Sourcetree客户端并配置SSH密钥选项->常规->SSH客户端配置->需要提供Gitbash
生成的私钥
- 使用源代码树克隆客户端并从 Visual Studio 打开相同的解决方案。 Push/Pull 将照常工作。
使用 Git Bash 生成您可能会找到的密钥 here。
这是一个允许通过 SSH 连接 Visual Studio(和 Git)到多个存储库的解决方案,必要时使用单独的私钥和 ssh 身份验证代理来处理密钥的密码.
这对公司用户有好处,因为您不需要计算机的管理员权限来执行以下步骤。
它在 Bitbucket 的示例中进行了解释,但可以扩展到 Github 和其他任何东西。
先决条件
- 已安装Visual Studio
- Bitbucket 帐户
下载并安装Git
在打开项目时,Visual Studio会要求您下载并安装Git包。您可以使用 Visual Studio 通知中提供的 link 或使用此 link.
仅为当前用户安装Git。
默认使用安装选项。
生成您的 private/public 密钥对
- 找到带有 ssh-keygen.exe 应用程序的 Git 文件夹。默认情况下是:
"%LOCALAPPDATA%\Programs\Git\usr\bin\"
例如:
"C:\Users\NSM\AppData\Local\Programs\Git\usr\bin\"
打开命令提示符并进入您找到的文件夹:
cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
创建一个文件夹来存储您的密钥(如果它不存在)
mkdir "%HOME%\.ssh"
生成新的 ssh 密钥:
ssh-keygen -t rsa -b 4096 -C "<your email of id>" -f "%HOME%/.ssh/id_rsa_<file name>"
例如:
ssh-keygen -t rsa -b 4096 -C "nsm" -f "%HOME%/.ssh/id_rsa_nsm"
建议指定密钥的密码。记住密码,忘记了将无法找回!
将您的 public 密钥添加到 Bitbucket
- 打开您的 Bitbucket 帐户管理页面
- 打开 SSH 密钥 部分并单击 添加密钥
- 从 "%HOME%/.ssh/" 文件夹中复制并粘贴生成的 public 密钥的内容。例如:id_rsa_nsm.pub:
ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
- 单击添加密钥按钮提交您的public密钥
配置 ssh 以将您的密钥用于 Bitbucket 源代码请求
在 "%HOME%/.ssh/" 文件夹中创建 config 文件,内容如下:
AddKeysToAgent yes
Host <Bitbucket FQDN or any label>
HostName <Bitbucket FQDN>
User git
IdentityFile ~/.ssh/id_rsa_<file name>
例如:
cd %HOME%/.ssh/
type config
输出:
AddKeysToAgent yes
Host bitbucket.org
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa_nsm
AddKeysToAgent yes 选项将根据需要将配置的私钥添加到 ssh 身份验证代理
配置Git使用ssh认证代理
每次使用私钥时都输入密码是一项繁琐的负担。为避免这种情况,我们将使用 ssh 身份验证代理
在找到 ssh-keygen 实用程序的文件夹中(默认情况下为:
"%LOCALAPPDATA%\Programs\Git\usr\bin\"),创建 ssh.cmd 文件,内容如下:
@echo off
setlocal enabledelayedexpansion
::: File storing SSH_AUTH_SOCK and SSH_AGENT_PID of the running agent
set __ssh_agent=%HOME%/.ssh/agent.env
if exist %__ssh_agent% goto loadenv
:startagent
echo Starting SSH Authentication Agent...
ssh-agent > %__ssh_agent%
:loadenv
::: Loading the agent environment variables from 2 first lines of agent.env:
::: SSH_AUTH_SOCK and SSH_AGENT_PID
set /a __count=0
for /f "tokens=1 delims=;" %%a in (%__ssh_agent%) do (
if !__count! LSS 2 (
set %%a
set /a __count+=1
) else (
goto endloadenv
)
)
:endloadenv
::: Checking the agent is running
for /f "tokens=1 delims=, usebackq" %%a in (`TASKLIST /FI "PID eq %SSH_AGENT_PID%" /FO CSV /NH`) do (
if not %%a == "ssh-agent.exe" goto startagent
)
:startssh
::: Run ssh, passing to it all command line parameters
ssh.exe %*
此脚本将在执行 ssh.exe 之前加载 ssh 身份验证代理,并允许 ssh.exe 通过 SSH_AUTH_SOCK 环境变量中指定的套接字与其通信。
从命令提示符执行以下命令:
git config --global core.sshCommand '%LOCALAPPDATA%/Programs/Git/usr/bin/ssh.cmd'
使用提供的 Bitbucket 为您的本地存储库创建远程 link
将 link 中的 FQDN 替换为您在 ./ssh/config 文件中提供的标签。这将允许您在连接到 Bitbucket 或 Github 存储库
时使用带有多个密钥的配置部分
全部完成
对我来说(Visual Studio 2019),它在添加了一个新的系统范围环境变量 GIT_SSH
且值为 C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
后起作用(TortoiseGit 的链接)TortoiseGitPlink.exe) . Putty 的 plink.exe 对我没用。可能是因为我使用的是 TortoiseGit。添加完这个记得重启Visual Studio.
我正在尝试使用 Visual Studio 2017 年的 SSH 连接到 Git 存储库(在 Bitbucket 上)(据我所知,Git 支持 SSH) .我已经设置好所有内容,在我的计算机上克隆了存储库,并且我可以提交,但是如果我尝试执行诸如获取之类的操作,它会失败并显示以下消息(来自 Visual Studio 的 "Output" window):
Error encountered while fetching: Git failed with a fatal error.
fatal: Could not read from remote repository.
在命令提示符下尝试,我得到了这些信息量稍大的消息:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
来自 Git Bash 我试过打开 SSH 代理,添加我的私钥,然后抓取,它似乎有效(或者至少我没有收到任何消息,不像当代理未启动或密钥未添加时):
eval `ssh-agent`
ssh-add ~/.ssh/xxxx
git fetch
但是Visual Studio还是连接不上。我也尝试在 Windows 命令提示符下做同样的事情:
ssh-agent
set SSH_AUTH_SOCK=/tmp/ssh-SIAryCa61iz9/agent.11128
set SSH_AGENT_PID=9804
ssh-add xxxx
git fetch
但我仍然得到同样的错误。
我已经将 public 密钥添加到 Bitbucket,ssh -T git@bitbucket.org
会输出 "logged in as xxxx"。此外,我可以使用 SourceTree 正确连接并将私钥添加到 Pageant(我用于 ssh-add
的密钥具有所需的 OpenSSH 格式,我是从 .ppk 创建的)。
我终于成功了,使用 PuTTY 的 Pageant 身份验证代理而不是 ssh-agent
,并按照提到的步骤 here(它用于 Visual Studio 代码,但适用于 Visual Studio 2017,我想它应该适用于任何使用 "official" Git for Windows).
因为我已经安装了 Pageant 并创建了一个 .ppk 私钥,我只需要通过创建 GIT_SSH
Windows 环境变量并设置它来让 Git 使用 Pageant到 "plink.exe" 文件的路径(在 PuTTY 安装中,例如 C:\Program Files (x86)\PuTTY\plink.exe
)。完成后,我只需要打开 Pageant 并添加私钥(并在使用存储库时保持打开状态),Visual Studio 将能够正常连接和发出命令。
还有另一种方法,适合我。
- 连接到 Git 存储库使用另一个 ssh 客户端,例如 ssh.exe。接受连接。它将生成 known_hosts 文件。
- 复制known_hosts和id_rsa文件到C:\Users\[UserName]\.ssh \
- 完成。即使没有 start-ssh-agent.
似乎是 VS2017 运行 ssh 连接本身,所以它忽略了 ssh-add 添加的密钥,只使用默认路径的密钥
这种方式对我有用(VS 2017 / Win7):
- 我安装了 git-scm 并与之连接。
- 完成(无需复制,它只是有效)
在 VS2017 中
我有同样的problem.i尝试了一些解决方法:
- 在 Visual Studio 安装程序中删除了 "git for windows",并在控制面板 中删除了 git
- 安装了两个。
- 尝试了一些 ssh 设置
但没有解决我的问题。 然后我打开"Visual Studio Installer"和修复。它解决了。
好吧,我找不到使用 VS 2017 配置 Git 存储库的直接方法,因为克隆选项只接受 URI 而不是 SSH。
我做了以下事情:
- 使用 Git Bash 生成了 SSH 密钥,并将 Git 服务器与 Git bash 生成的密钥同步。您应该在“设置”下提供 public 键。
- 下载Sourcetree客户端并配置SSH密钥选项->常规->SSH客户端配置->需要提供Gitbash 生成的私钥
- 使用源代码树克隆客户端并从 Visual Studio 打开相同的解决方案。 Push/Pull 将照常工作。
使用 Git Bash 生成您可能会找到的密钥 here。
这是一个允许通过 SSH 连接 Visual Studio(和 Git)到多个存储库的解决方案,必要时使用单独的私钥和 ssh 身份验证代理来处理密钥的密码.
这对公司用户有好处,因为您不需要计算机的管理员权限来执行以下步骤。
它在 Bitbucket 的示例中进行了解释,但可以扩展到 Github 和其他任何东西。
先决条件
- 已安装Visual Studio
- Bitbucket 帐户
下载并安装Git
在打开项目时,Visual Studio会要求您下载并安装Git包。您可以使用 Visual Studio 通知中提供的 link 或使用此 link.
仅为当前用户安装Git。 默认使用安装选项。
生成您的 private/public 密钥对
- 找到带有 ssh-keygen.exe 应用程序的 Git 文件夹。默认情况下是: "%LOCALAPPDATA%\Programs\Git\usr\bin\" 例如: "C:\Users\NSM\AppData\Local\Programs\Git\usr\bin\"
打开命令提示符并进入您找到的文件夹:
cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
创建一个文件夹来存储您的密钥(如果它不存在)
mkdir "%HOME%\.ssh"
生成新的 ssh 密钥:
ssh-keygen -t rsa -b 4096 -C "<your email of id>" -f "%HOME%/.ssh/id_rsa_<file name>"
例如:
ssh-keygen -t rsa -b 4096 -C "nsm" -f "%HOME%/.ssh/id_rsa_nsm"
建议指定密钥的密码。记住密码,忘记了将无法找回!
将您的 public 密钥添加到 Bitbucket
- 打开您的 Bitbucket 帐户管理页面
- 打开 SSH 密钥 部分并单击 添加密钥
- 从 "%HOME%/.ssh/" 文件夹中复制并粘贴生成的 public 密钥的内容。例如:id_rsa_nsm.pub:
ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
- 单击添加密钥按钮提交您的public密钥
配置 ssh 以将您的密钥用于 Bitbucket 源代码请求
在 "%HOME%/.ssh/" 文件夹中创建 config 文件,内容如下:
AddKeysToAgent yes
Host <Bitbucket FQDN or any label>
HostName <Bitbucket FQDN>
User git
IdentityFile ~/.ssh/id_rsa_<file name>
例如:
cd %HOME%/.ssh/
type config
输出:
AddKeysToAgent yes
Host bitbucket.org
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa_nsm
AddKeysToAgent yes 选项将根据需要将配置的私钥添加到 ssh 身份验证代理
配置Git使用ssh认证代理
每次使用私钥时都输入密码是一项繁琐的负担。为避免这种情况,我们将使用 ssh 身份验证代理
在找到 ssh-keygen 实用程序的文件夹中(默认情况下为: "%LOCALAPPDATA%\Programs\Git\usr\bin\"),创建 ssh.cmd 文件,内容如下:
@echo off setlocal enabledelayedexpansion ::: File storing SSH_AUTH_SOCK and SSH_AGENT_PID of the running agent set __ssh_agent=%HOME%/.ssh/agent.env if exist %__ssh_agent% goto loadenv :startagent echo Starting SSH Authentication Agent... ssh-agent > %__ssh_agent% :loadenv ::: Loading the agent environment variables from 2 first lines of agent.env: ::: SSH_AUTH_SOCK and SSH_AGENT_PID set /a __count=0 for /f "tokens=1 delims=;" %%a in (%__ssh_agent%) do ( if !__count! LSS 2 ( set %%a set /a __count+=1 ) else ( goto endloadenv ) ) :endloadenv ::: Checking the agent is running for /f "tokens=1 delims=, usebackq" %%a in (`TASKLIST /FI "PID eq %SSH_AGENT_PID%" /FO CSV /NH`) do ( if not %%a == "ssh-agent.exe" goto startagent ) :startssh ::: Run ssh, passing to it all command line parameters ssh.exe %*
此脚本将在执行 ssh.exe 之前加载 ssh 身份验证代理,并允许 ssh.exe 通过 SSH_AUTH_SOCK 环境变量中指定的套接字与其通信。
从命令提示符执行以下命令:
git config --global core.sshCommand '%LOCALAPPDATA%/Programs/Git/usr/bin/ssh.cmd'
使用提供的 Bitbucket 为您的本地存储库创建远程 link
将 link 中的 FQDN 替换为您在 ./ssh/config 文件中提供的标签。这将允许您在连接到 Bitbucket 或 Github 存储库
时使用带有多个密钥的配置部分全部完成
对我来说(Visual Studio 2019),它在添加了一个新的系统范围环境变量 GIT_SSH
且值为 C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
后起作用(TortoiseGit 的链接)TortoiseGitPlink.exe) . Putty 的 plink.exe 对我没用。可能是因为我使用的是 TortoiseGit。添加完这个记得重启Visual Studio.