我使用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密钥之外,我是否需要为此设置其他东西?
当前回答
运行macOS Cataline 10.15时,密钥链缓存方法对我不起作用
以下是对我有用的:
git remote rm origin
git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git
这也应该在GitLab上运行
确保用户名包含电子邮件地址,以删除@email部分,否则您将收到一个错误,说明URL使用了错误/非法格式或缺少URL。
希望这有帮助!
其他回答
我认为您可能有错误的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密钥而不是用户名和密码进行验证。
如果Git抱怨已经添加了'origin',请打开.config文件,将[remote origin]后面的url=“…”部分编辑为url=ssh://github/username/repo.git
其他服务也是如此。确保地址如下:protocol://something@网址
例如,Azure DevOps的.git/config:
[remote "origin"]
url = https://mystore@dev.azure.com/mystore/myproject/
fetch = +refs/heads/*:refs/remotes/origin/*
在Windows Subsystem for Linux(WSL)上,这是我发现的唯一可行的解决方案:
eval `ssh-agent`; ssh-add ~/.ssh/id_rsa
这是ssh代理未在WSL中正确注册的问题。
在GitHub中使用密钥之前,请按照教程中的步骤测试SSH连接:
$ ssh -T git@github.com
# Attempts to ssh to GitHub
如果您使用的是Windows,而GitHub上突然开始出现这种情况,这可能是由于GitHub最近在2018-02-22禁用了对不推荐的加密算法的支持,在这种情况下,解决方案只需下载并安装最新版本的完整Git for Windows或者仅使用Windows的Git凭据管理器。
还要查找是谁向您索要密码。是Git还是SSH代理?
就我而言,每次我做git pull时,它都会问我:
输入密钥“/work/username/.ssh/id_rsa”的密码:
所以我假设是Git要求密码。所以我一直在寻找解决方案,后来才发现我的SSH代理已经关闭。可以使用eval$(ssh-agent)和ssh-add进行修复,如下所示。
我还在下面粘贴了一个小片段,您可以将其添加到~/.bashrc文件(或等效文件)中,以确保SSH代理在登录时启动。
无论如何,这是我犯的一个相当愚蠢的错误,但把它张贴在这里,以防有人像我一样,从找错树上节省一些时间。
# 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