我使用Git已经有一段时间了,但不断的密码请求开始让我感到很烦。
我使用的是Mac OS X和GitHub,我按照GitHub的设置Git页面的指示设置Git和SSH密钥。
我还将github SSH密钥添加到了我的Mac OS X密钥链中,正如github的SSH密钥密码页面中提到的那样。我的公钥已在Git中注册。
然而,每次我尝试Git拉时,我都必须输入用户名和密码。除了SSH密钥之外,我是否需要为此设置其他东西?
我使用Git已经有一段时间了,但不断的密码请求开始让我感到很烦。
我使用的是Mac OS X和GitHub,我按照GitHub的设置Git页面的指示设置Git和SSH密钥。
我还将github SSH密钥添加到了我的Mac OS X密钥链中,正如github的SSH密钥密码页面中提到的那样。我的公钥已在Git中注册。
然而,每次我尝试Git拉时,我都必须输入用户名和密码。除了SSH密钥之外,我是否需要为此设置其他东西?
当前回答
在我的情况下,当我尝试选择如下URL时,总是会收到密码提示:
git fetch http://username@gerrit-domainname/repositoryname refs/changes/1/12345/1 && git cherry-pick FETCH_HEAD
当cherry在另一台机器上选择时,这个URL工作得很好。然而,当我尝试使用正确的密码进行cherrypick时abc@12345我过去常犯以下错误:
remote: Unauthorized
remote: Authentication failed for http://username@gerrit-domainname
在我的git配置文件中,远程URL如下所示:
url = ssh://gerrit-domainname:8080/wnc
解决方案:我通过提供HTTP密码解决了身份验证失败问题,该密码位于我的gerrit帐户->设置->HTTP密码。
HTTP密码类似于Th+IsAduMMy+PaSS+WordT+RY+Your+OwNPaSs,这与我的实际密码有很大不同abc@12345
注意:我的cherrpick URL以gitfetch开头。。。因此,此解决方案可能适用于git签出/下载,其中URL以git fetch开头。。。
其他回答
如果设置了SSH代理,还可以将其添加到~/.gitconfig中,以强制git对所有GitHub repo使用SSH,而不是HTTPS:
[url "ssh://git@github.com/"]
insteadOf = git://github.com/
insteadOf = https://github.com/
(如果你主要使用公共回购,你也可以使用pushInsteadOf而不是insteadOf,因为从公共回购中读取可以在没有身份验证的情况下完成)。
配置凭据帮助程序
在OS X(现在是macOS)上,在终端中运行此命令:
git config --global credential.helper osxkeychain
它使Git能够使用文件Keychain.app来存储用户名和密码,并从密钥链中检索私有SSH密钥的密码短语。
对于Windows使用:
git config --global credential.helper wincred
对于Linux使用:
git config --global credential.helper cache // If you want to cache the credentials for some time (default 15 minutes)
OR
git config --global credential.helper store // if you want to store the credentials for ever (considered unsafe)
注意:第一种方法将在内存中缓存凭据,而第二种方法将以纯文本格式将它们存储在~/.git凭据中。
查看此处了解有关Linux方法的更多信息。查看此处以了解有关这三个方面的更多信息。
故障排除
如果Git凭据助手配置正确,macOS会将密码保存在密钥链中。有时SSH和密钥链中存储的密码之间的连接可能会中断。运行ssh-add-K或ssh-add ~/.ssh/id_rsa将密钥再次添加到密钥链。
macOS v10.12(Sierra)对ssh的更改
对于macOS v10.12(Sierra),每次重新启动后都需要运行ssh add-K。要避免这种情况,请使用此内容创建~/.ssh/config。
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
从10.12.2的ssh_config手册页:
使用钥匙链
在macOS上,指定当尝试使用特定密钥时,系统是否应在用户的密钥链中搜索密码短语。当用户提供密码短语时,此选项还指定密码短语在验证正确后是否应存储到密钥链中。参数必须为“yes”或“no”。默认值为“no”。
苹果增加了Technote 2449,解释了发生的事情。
在macOSSierra之前,ssh将显示一个对话框,询问您的密码,并提供将其存储到密钥链中的选项。此UI在一段时间前被弃用,现已删除。
我也有同样的问题。MacOS Mojave钥匙链不断询问密码。为了安全起见,您的id_rsa应该使用密码短语进行加密。然后尝试将其添加到密钥链ssh-add-K~/.ssh/id_rsa
如果密钥位于~/.ssh以外的另一个文件夹中,请用正确的文件夹替换。
Keychain现在知道了你的ssh密钥,希望现在一切正常。
如果您仍然面临这个问题,请尝试
1. brew install keychain
2. echo '/usr/local/bin/keychain $HOME/.ssh/id_rsa' >> ~/.bash_profile
echo 'source $HOME/.keychain/$HOSTNAME-sh' ~/.bash_profile
3. ssh-add -K ~/.ssh/id_rsa
希望它现在应该起作用了。
更新:-K标志已被弃用。请改用以下方法:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519 # path to private key
如果您使用https协议,Git将提示您输入密码。如果您使用ssh,它将使用您的私钥进行身份验证,而不是询问密码。
以下是解决此问题的方法:
git远程-v
这将显示来源的url。您将注意到此url中的https。(此处示例)
现在,您必须先删除这个,然后使用ssh添加url
git remote remove origin
git remote add origin git@github.com:PrestaShop/PrestaShop.git
如果你想阻止Git总是要求你提供GitHub存储库的登录凭据,这很容易做到。
使用SSH而不是HTTPS
您可以使用SSH而不是HTTPS更新源远程“
git remote set-url origin git@github.com:username/your-repo.git
配置Git以存储密码和用户名
下面是如何让Git存储用户名和密码:
git config --global credential.helper store
接下来,保存会话的用户名和密码:
git config --global credential.helper cache