我已经使用Git有一段时间了,但是不停地要求输入密码让我感到非常烦恼。
我使用的是Mac OS X和GitHub,按照GitHub的 Set Up Git页面 的指示设置了Git和我的SSH密钥。
我还像GitHub的SSH key passphrases页面上提到的那样,将github SSH 密钥添加到了我的Mac OS X密钥链中。我的公钥已在Git中注册。
尽管如此,每次我尝试Git pull时,都需要输入我的用户名和密码。除了SSH密钥之外,还需要设置其他内容吗?
我已经使用Git有一段时间了,但是不停地要求输入密码让我感到非常烦恼。
我使用的是Mac OS X和GitHub,按照GitHub的 Set Up Git页面 的指示设置了Git和我的SSH密钥。
我还像GitHub的SSH key passphrases页面上提到的那样,将github SSH 密钥添加到了我的Mac OS X密钥链中。我的公钥已在Git中注册。
尽管如此,每次我尝试Git pull时,都需要输入我的用户名和密码。除了SSH密钥之外,还需要设置其他内容吗?
我认为你可能使用了错误的Git仓库URL。
打开 .git/config
并找到 [remote "origin"] 部分。确保你正在使用SSH连接:
ssh://git@github.com/username/repo.git
如果您点击“克隆或下载”并选择“SSH”,则可以在仓库的主页面上看到SSH URL。
而不是https
或git
。
https://github.com/username/repo.git
git://github.com/username/repo.git
你现在可以使用仅SSH密钥而不是用户名和密码进行验证。[remote "origin"]
url = https://mystore@dev.azure.com/mystore/myproject/
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:organization/Repo.git
可以。虽然他让我朝着正确的方向前进,但还是要为这个解决方案点赞!成功了! - jamesmortensen在OS X(现在的macOS)中,在终端(Terminal)中运行此命令:
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方法的更多信息,请单击此处。
如果想了解有关全部三种方法的更多信息,请单击此处。
如果Git凭据助手已正确配置,则macOS会将密码短语保存在钥匙串中。有时候,SSH与钥匙串中存储的密码短语之间的连接可能会断开。运行ssh-add -K
或ssh-add ~/.ssh/id_rsa
可以再次将密钥添加到钥匙串中。
对于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
在macOS上,指定系统在尝试使用特定密钥时是否应搜索用户的钥匙串中的密码短语。当用户提供密码短语时,此选项还指定是否应在验证为正确后将密码短语存储到钥匙串中。参数必须为'yes'或'no'。默认值为'no'。
苹果已经添加了Technote 2449,解释了发生了什么。
在macOS Sierra之前,
ssh
会弹出一个对话框询问您的密码短语,并提供将其存储到钥匙串中的选项。这个UI已经被弃用了很长时间,现在已经被移除。
.netrc
文件方法。 - Josh'credential-osxkeychain' is not a git command.
,因为我没有安装凭证助手。我按照这里的说明进行安装:https://help.github.com/articles/set-up-git#password-caching - Hugh我在升级到macOS v10.12 (Sierra)后遇到了这个问题。看起来是SSH代理在升级时被清除了。
$ ssh-add -L
The agent has no identities.
运行ssh-add
,找到了我的现有身份验证信息。我输入密码,然后就可以再次使用了。
正如其他人所说,您可以安装密码缓存助手。我主要想为其他平台发布链接,而不仅仅是Mac。我正在运行Linux服务器,这个链接对我很有帮助:在Git中缓存GitHub密码
对于Mac:
git credential-osxkeychain
Windows:
git config --global credential.helper wincred
Linux:
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)
git remote set-url origin git@github.com:user/repo.git
git remote -v
时已经设置过了,但是仍然要求我输入密码。 - IgorGanapolsky同时找出要求您输入密码短语的来源是谁。是Git还是您的SSH代理?
在我的情况下,每次我执行git pull
都会询问我:
为密钥'/work/username/.ssh/id_rsa'输入密码短语:
所以我假设是Git要求输入密码短语。于是我不断寻找解决方案,直到后来我意识到我的SSH代理已关闭。可以使用eval $(ssh-agent)
和ssh-add
修复,如此处所示。
此外,我在下面粘贴了一小段代码,您可以将其添加到您的~/.bashrc
文件(或等价文件)中,以确保在登录时启动您的SSH代理。
无论如何,这是我犯的一个相当愚蠢的错误,但我在这里发帖,以防能帮助某人节省一些时间,就像我曾经做过的那样。
SSH_ENV="$HOME/.ssh/environment"
# Start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# Spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
echo succeeded
chmod 600 ${SSH_ENV}
. ${SSH_ENV} > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. ${SSH_ENV} > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
SSH_ENV="$HOME/.ssh/environment"
。 - kellyfjgit config credential.helper store
注意: 尽管这很方便,但 Git 会以明文形式存储你的凭据于本地文件 (.git-credentials) 中,该文件位于你的项目目录下(参见下文中的“home”目录)。如果你不喜欢这种方式,请删除该文件并切换至使用缓存选项。
如果你希望每次需要连接到远程仓库时 Git 都要求你输入凭据,请运行以下命令:
git config --unset credential.helper
如果要将密码存储在位于%HOME%目录而非项目目录中的.git-credentials文件中,可以使用--global标志。
git config --global credential.helper store
在Windows上的Git 1.7.9+中,在命令提示符上运行以下命令以在文本编辑器中打开配置文件:
git config --global --edit
如果该块不存在,请在文件中添加以下内容,或根据需要进行编辑:
[credential "https://giturl.com"]
username = <user id>
helper = wincred
保存并关闭文件。在上述更改后,您只需要提供一次凭据。
使用以下命令增加超时时间,这样您就可以在一段时间内重新输入密码。
git config --global credential.helper 'cache --timeout 3600'
我在Bitbucket和GitHub上都使用了它,它对两者都有效。唯一需要做的就是确保3600
是以秒为单位的。你可以将其增加到任何你想要的程度。我将其更改为259200
,大约是30天。这样,我每隔30天左右就需要重新输入密码。
使用SSH推送/拉取Git和GitHub的指南:Windows下Git图解指南
netrc
”。在这里查看完整示例。 - VonC