当我克隆一个存储库时,我一直有点“忍受”Github总是问我的用户名和密码。我想绕过这一步,因为这是我的工作流中的一个烦恼。
我尝试使用本指南设置SSH密钥(我成功地做到了)。https://help.github.com/articles/generating-ssh-keys,我成功了。
我的问题是,当克隆一个存储库(使用SSH)时,我仍然被要求输入我的github密码和密码短语。我的理解是,在我设置了这个SSH密钥之后,我就不再需要这样做了。
我不知道该问什么,所以我就说说我的目标吧。
我希望能够克隆存储库,而不必一直把我的Github信息。
我的SSH密钥丢失了什么?如果有人能提供一些指导或资源,我会很感激,因为当涉及到GitHub中的SSH身份验证时,我总是感到有点失落。
据我所知,这是一个测试事情是否正常工作的命令,下面是来自我的控制台的输出:
~ $ ssh -T git@github.com
Saving password to keychain failed
Enter passphrase for key '/Users/MYNAME/.ssh/id_rsa':
Hi MYNAME! You've successfully authenticated, but GitHub does not provide shell access.
当我输入密码时,应该先失败吗?然后,当我输入密码时,它就通过了。
加上上面的答案。
为了git能够使用ssh-agent,不得不在Windows上再做一步。
必须在powershell中执行以下命令来更新环境变量:
PS> [Environment]::SetEnvironmentVariable("GIT_SSH", "$((Get-Command ssh).Source)", [System.EnvironmentVariableTarget]::User)
重启VSCode, Powershell或任何你正在使用的终端来激活env变量。
完整的说明可以在这里(https://snowdrift.tech/cli/ssh/git/tutorials/2019/01/31/using-ssh-agent-git-windows.html)找到。
这个答案主要是为windows用户,也同样适用于如果你在任何其他操作系统上克隆tfs, github或gitlab的问题。
使用SSH协议时,默认的认证方式为私钥认证。无论何时由于某种原因失败,ssh-agent都会退回到基于用户名和密码的身份验证。
基于默认密钥的身份验证失败有几个原因。以下是最常见的情况:
a) ssh-agent无法找到默认私钥文件id_rsa,且没有显式指定其他私钥路径。
b)服务器中存储的公钥不正确。
c)您要克隆的路径不正确。
在任何情况下,为了解决问题,首先执行git clone命令并详细记录命令:
GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone ssh://pathToYourRepo
您可以浏览日志中的每一步,以直观地了解问题可能是什么。
(a)情况下的故障排除
确保.ssh目录中有默认密钥名id_rsa。在使用ssh-keygen命令生成密钥时,您可能指定了一些不同的密钥名,或者可能根本没有任何密钥)。
如果您想指定不同的密钥进行身份验证,请使用以下命令:
ssh-agent bash -c 'ssh-add ~/.ssh/anotherKey;git克隆ssh://pathToYourRepo
(b)情况下的故障排除
确保在服务器中存储公钥时没有多余的空格。
(c)情况下的故障排除
确保您没有尝试使用存储库路径的https版本进行克隆。
在Mac OSX上,您可以使用以下命令将您的私钥添加到keychain:
ssh-add -K /path/to/private_key
如果您的私钥存储在~/。SSH,命名为id_rsa:
ssh-add -K ~/.ssh/id_rsa
然后系统会提示您输入密码,该密码将存储在您的钥匙串中。
编辑-处理重启
为了在重新启动后也不必填写密码,在ssh配置文件中添加以下内容(通常位于~/.ssh/config)
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
如果你使用HTTPs url,它总是会询问你的用户名/密码。这个问题可以用@Manavalan Gajapathy的评论来解决(复制这里):
看这个github文档转换远程的URL从https到ssh。要检查remote的URL是ssh还是https,请使用git remote -v。从https切换到ssh:
git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
如果您在克隆/设置远程时正确使用SSH:请确保您有一个SSH -agent来记住您的密码(参见@Komu的回答)。这样,每个终端会话只需要输入一次密码。
如果它仍然太烦人,那么简单地设置一个ssh-key没有密码短语。