通过SSH克隆来自VSTS的Git repo要求输入密码!意外

时间:2017-05-09 11:18:25

标签: git ssh azure-devops

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

问题描述:

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

我已在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键,但最后一行令人困惑。我应该输入什么密码,为什么要问它?怎么让它不问呢?如何使克隆命令完全不问任何东西?

3 个答案:

答案 0 :(得分:3)

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

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

根据您的评论(在现已删除的答案中)我了解您已使用PuTTy生成密钥,并且我怀疑您的密钥格式不正确(maybe this will help?)({ {3}}),确保它以:

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

结束
-----END RSA PRIVATE KEY-----

无论如何,公钥验证失败,因此它会询问mycompany帐户的密码:

mycompany@mycompany.visualstudio.com's password:

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

答案 1 :(得分:1)

使用以下命令浏览日志:

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

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

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

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

答案 2 :(得分:1)

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

对我来说,解决方案很容易-只需修改.ssh / config文件(我在Windows和Mac上都使用OpenSSH)。我在Microsoft文档上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