通过 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 存储库需要输入密码!意外的主要内容,如果未能解决你的问题,请参考以下文章