通过 SSH 从 VSTS 克隆 Git 存储库需要输入密码!意外

Posted

技术标签:

【中文标题】通过 SSH 从 VSTS 克隆 Git 存储库需要输入密码!意外【英文标题】:Cloning a Git repo from VSTS over SSH asks a password! Unexpected 【发布时间】:2017-10-07 16:20:58 【问题描述】:

目标是在不提供任何密码的情况下在 Visual Studio Team Services 中克隆 Git 存储库。进一步的目标是完全以非交互方式完成,完全没有任何提示。

问题描述:

操作系统是 Windows Server 2016。假设我的用户名是 batman。 我已在 Windows 中 C:\Users\batman\.ssh\id_rsa 设置了私钥(无密码)。

我已经为我在 VSTS 的用户帐户添加了公钥。都很好。

我想克隆存储库,VSTS Web UI 为我提供了存储库的 SSH URL。我在执行的以下命令中使用它:

git clone ssh://mycompany@mycompany.visualstudio.com:22/MyProject/_git/MyRepo

回应:

Cloning into 'MyRepo'...
Enter passphrase for key '/c/Users/batman/.ssh/id_rsa':
mycompany@mycompany.visualstudio.com's password:

所以首先它会询问我只需按 Enter 键的密钥密码,但最后一行令人困惑。我应该输入什么密码,为什么要输入密码?怎么让它不问呢?如何让克隆命令什么都不问?

【问题讨论】:

【参考方案1】:

在我的解释中,“...visualstudio.com 的密码”消息是公钥身份验证失败的明确标志(恕我直言,这应该是错误消息的一部分)。在大多数情况下,这意味着未找到私钥文件或其格式无效。

对我来说,解决方案很简单——只需修改 .ssh/config 文件(我在 Windows 和 Mac 上都使用 OpenSSH)。我在 Microsoft Docs 上找到的正确设置,this page 的底部

将其粘贴到 .ssh/config 文件后,一切都开始正常工作了:

# Most common scenario: to use the same key across all hosted Azure DevOps
# organizations, add a Host entry like this:
Host ssh.dev.azure.com
  IdentityFile ~/.ssh/your_private_key
  IdentitiesOnly yes

# This model will also work if you still use the older SSH URLs with a
# hostname of vs-ssh.visualstudio.com:
Host vs-ssh.visualstudio.com
  IdentityFile ~/.ssh/your_private_key
  IdentitiesOnly yes

【讨论】:

【参考方案2】:

使用命令浏览日志:

GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone ssh://pathToYourRepo

在大多数情况下,问题在于默认名称为 id_rsa 的 .ssh 目录中缺少私钥。您可以通过在使用 ssh-keygen 生成密钥时在密钥名称提示中不指定任何内容来允许默认名称“id_rsa”来解决此问题。 如果您必须使用不同的密钥,您可以使用以下命令指定其路径:

 ssh-agent bash -c 'ssh-add ~/.ssh/anotherKey; git clone ssh://pathToYourRepo'

最后确保您实际上是在克隆路径的 ssh 版本而不是 https(请参阅路径以 ssh:// 而不是 https:// 开头)并且在复制时没有任何空格将公钥添加到服务器的密钥列表中。

【讨论】:

【参考方案3】:

首先,它要求您输入私钥的密码:

Enter passphrase for key '/c/Users/batman/.ssh/id_rsa':

从您的 cmets(在现已删除的答案中)我了解到您已使用 PuTTy 生成密钥,我怀疑您的密钥格式不正确 (maybe this will help?)(or this?),确保它以:

开头
-----BEGIN RSA PRIVATE KEY-----

结尾
-----END RSA PRIVATE KEY-----

无论如何,公钥认证失败,所以它会要求mycompany帐户的密码:

mycompany@mycompany.visualstudio.com's password:

如果公钥认证成功,则不会发生这种情况。

【讨论】:

太好了,就是这样!密钥的格式不同。现在我将 Putty Key Generator 中的密钥导出为“OpenSSH 密钥”,现在 clone 不会像目标那样提示任何内容。谢谢! 哇...如果它表明密码不匹配,那就太好了。这个问题的一半是因为你不能像 Ubuntu bash 终端那样雄辩地将密码粘贴到 Windows 控制台中。

以上是关于通过 SSH 从 VSTS 克隆 Git 存储库需要输入密码!意外的主要内容,如果未能解决你的问题,请参考以下文章

通过 SFTP 克隆 Git 存储库

Git 存储库克隆错误(终端提示已禁用)

如何从 Docker 容器克隆 Git 存储库

如何在 cpanel 中克隆 github 私有存储库(没有终端或 ssh 的共享主机)?

ssh克隆不克隆git中的repo

无法通过 SSH 隧道克隆 git