我使用Git已经有一段时间了,但不断有人要求我输入密码,这让我非常恼火。
我使用的是Mac和GitHub,我按照GitHub的Set Up Git page的指示设置了Git和我的SSH密钥。
正如GitHub's SSH key passphrases page上提到的,我还将github SSH密钥添加到我的Mac-OS-X密钥链中。我的公钥是用Git注册的。
然而,每次我尝试Git pull时,我都必须输入我的用户名和密码。除了SSH密钥之外,我还需要为此设置其他内容吗?
发布于 2011-10-15 05:10:51
我想你可能弄错了Git仓库的URL。
打开.git/config并找到远程“源”部分。确保您使用的是SSH:
ssh://git@github.com/username/repo.git如果单击Clone或download并选择ssh,则可以在存储库的主页中看到SSH URL。
而不是https或git:
https://github.com/username/repo.git
git://github.com/username/repo.git现在,您可以只使用SSH密钥而不是用户名和密码进行验证。
如果Git报告'origin' has already been added,请打开.config文件,并在[remote origin]为url = ssh://github/username/repo.git后编辑url = "..."部件
其他服务也是如此。确保地址如下所示:protocol://something@url
例如,Azure DevOps的.git/config:
[remote "origin"]
url = https://mystore@dev.azure.com/mystore/myproject/
fetch = +refs/heads/*:refs/remotes/origin/*发布于 2012-07-11 16:44:20
配置credential.helper
在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)或
git config --global credential.helper store // if you want to store the credentials for ever (considered unsafe)注意:第一个方法将在内存中缓存凭据,而第二个方法将以纯文本格式将它们存储在~/.git-credentials中。
有关Linux方法的更多信息,请查看here。
有关这三个项目的更多信息,请查看here。
故障排除
如果正确配置了Git凭据助手,macOS会将密码短语保存在密钥链中。有时connection between SSH and the passphrases stored in the keychain可能会崩溃。运行ssh-add -K或ssh-add ~/.ssh/id_rsa将密钥再次添加到密钥链。
macOS v10.12 ( ssh )对ssh的更改
对于macOS v10.12 (Sierra),每次重新启动后都需要运行ssh-add -K。要避免这种情况,请使用此内容创建~/.ssh/config。
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa在10.12.2上的ssh_config man页面中:
UseKeychain On macOS,指定在尝试使用特定密钥时,系统是否应在用户的密钥链中搜索密码短语。当用户提供密码短语时,此选项还指定密码短语在被验证为正确后是否应存储到密钥链中。参数必须为'yes‘或'no’。默认值为'no‘。
苹果添加了Technote 2449,它可以解释发生了什么。
在macOS Sierra之前,
ssh会显示一个对话框,询问您的密码短语,并提供将其存储到密钥链中的选项。此UI在一段时间前已弃用,并已被删除。
发布于 2016-09-21 20:17:03
当我升级到macOS v10.12 (塞拉)时,这种情况就发生在我身上。看起来SSH代理在升级时被清除了。
$ ssh-add -L
The agent has no identities.只需运行ssh-add即可找到我现有的身份。我输入了密码,可以再试一次了。
https://stackoverflow.com/questions/7773181
复制相似问题