我已经使用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密钥以外的其他东西吗?
Answers:
我认为您可能使用了错误的Git存储库URL。
打开.git/config
并找到[远程“来源”]部分。确保您使用的是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' has already been added
,打开.config
的文件和编辑的url = "..."
部分后[remote origin]
为url = ssh://github/username/repo.git
其他服务也是如此。确保地址看起来像:protocol://something@url
例如.git/config
,Azure DevOps:
[remote "origin"]
url = https://mystore@dev.azure.com/mystore/myproject/
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "origin"]
set区域中url = ssh://git@github.com/username/Repo.git
。那对我有用。
url = git@github.com:organization/Repo.git
确实起作用。+1可引导我走上正确的道路!成功!
在OS X(现在为macOS)上,在 Terminal中:
git config --global credential.helper osxkeychain
它使Git可以使用文件Keychain.app来存储用户名和密码,并从钥匙串中检索通向您的SSH私钥的密码。
对于Windows使用:
git config --global credential.helper wincred
如果正确配置了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
从ssh_config
man
10.12.2 的页面上:
UseKeychain
在macOS上,指定在尝试使用特定密钥时系统是否应在用户的密钥链中搜索密码短语。当用户提供密码短语时,此选项还指定一旦被验证正确,是否应将密码短语存储在钥匙串中。参数必须为“是”或“否”。默认为“否”。
苹果增加了Technote 2449,它解释了发生了什么。
在macOS Sierra之前,
ssh
将出现一个对话框,询问您的密码短语,并提供将其存储到钥匙串中的选项。此用户界面在一段时间前已过时,已被删除。
.netrc
这使你的密码以明文文件的方法。
'credential-osxkeychain' is not a git command.
由于没有安装凭据助手,因此出现了错误。我按照此处的说明进行安装:help.github.com/articles/set-up-git#password-caching
git config --global credential.helper osxkeychain
在.ssh
目录中添加config文件时github一直要求pw的问题。
当我升级到macOS v10.12(Sierra)时,这发生在我身上。看起来SSH代理已在升级时清除。
$ ssh-add -L
The agent has no identities.
只需运行即可ssh-add
找到我现有的身份。我输入了密码,很高兴再次进入。
使用此方法:用适当的主机名替换github.com
git remote set-url origin git@github.com:user/repo.git
git remote -v
。但是,仍然提示我输入密码。
正如其他人所说,您可以安装密码缓存帮助器。我主要只是想发布其他平台的链接,而不仅仅是Mac。我正在运行Linux服务器,这对您有所帮助:在Git中缓存GitHub密码
对于Mac:
git credential-osxkeychain
视窗:
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还是您的SSH代理?
就我而言,每次我做的git pull
都是问我:
Enter passphrase for key '/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
SSH_ENV="$HOME/.ssh/environment"
git config credential.helper store
注意:虽然这很方便,但是Git会将您的凭据以明文形式存储在项目目录(请参见下面的“主”目录)下的本地文件(.git-credentials)中。如果您不喜欢这样做,请删除该文件并切换到使用缓存选项。
如果您希望Git每次需要连接到远程存储库时都继续要求您提供凭据,则可以运行以下命令:
git config --unset credential.helper
要将密码存储在%HOME%目录(而不是项目目录)中的.git-credentials中,请使用--global标志
git config --global credential.helper store
使用SSH推/拉的Windows和GitHub上的Git指南:Windows上的Git图解指南
在Windows for 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天左右重新输入一次密码。
我认为您已解决了您的问题,但是我看不到这里的解决方案对我有所帮助,所以就在这里。
输入终端:
echo "" > ~/.ssh/known_hosts
这将清空您的known_hosts
文件,并且您必须添加您使用过并已连接的每个主机,但是它解决了问题。
cat /dev/null > ~/.ssh/known_hosts
会做同样的。
> ~/.ssh/known_hosts
甚至更短:)
从某种意义上讲,我觉得static_rtti提供的答案是不可靠的。我不知道这是否较早可用,但是Git工具现在提供了凭证存储。
缓存模式
$ git config --global credential.helper cache
使用“缓存”模式可以将凭据保留在内存中一段时间。密码从未存储在磁盘上,并且15分钟后会从缓存中清除。
储存模式
$ git config --global credential.helper 'store --file ~/.my-credentials'
使用“存储”模式将凭据保存到磁盘上的纯文本文件中,并且它们永远不会过期。
我个人使用商店模式。我删除了存储库,将其克隆,然后必须输入一次凭据。
credential.helper cache
不起作用。应该是git config --global credential.helper wincred
。
git config --local credential.helper store
。就我而言,我使用的是HTTPS,这样一来,我只键入一次用户名/密码,之后,我的凭据就从〜/ .git-credentials中重新使用
orkoden关于在终端机上使用带有Git的钥匙串的答案不完整,并会引发错误。这是保存在钥匙串终端中输入的用户名和密码所需执行的操作:
curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain
然后输入
git config --global credential.helper osxkeychain
如果您已经在curl之前完成了Git配置,那没问题;会的。
正如static_rtti所述,更改
https://github.com/username/repo.git
git://github.com/username/repo.git
至
ssh://git@github.com/username/repo.git
我自己https
将.git / config文件中的更改为ssh
,但仍然无法正常工作。然后我看到您必须更改github.com
为git@github.com
。获取实际正确URL的一种好方法是转到您的项目页面,然后单击以下命令:
然后将此URL添加到配置文件。
在Linux的Windows子系统(WSL)上,这是我发现可以使用的唯一解决方案:
eval
`ssh-agent` ; ssh-add ~/.ssh/id_rsa
ssh代理未在WSL中正确注册是一个问题。
如果您想阻止Git总是要求您提供GitHub存储库的登录凭据,则可以轻松完成此操作。
您可以使用SSH而不是HTTPS来更新源远程”
git remote set-url origin git@github.com:username/your-repo.git
这是使Git存储用户名和密码的方法:
git config --global credential.helper store
接下来,保存会话的用户名和密码:
git config --global credential.helper cache
第1步:检查当前配置
cat .git/config
你会得到:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/path_to_your_git.git
fetch = +refs/heads/*:refs/remotes/origin/*
[user]
name = your_username
email = your_email
[branch "master-staging"]
remote = origin
merge = refs/heads/master-staging
步骤2:删除您的远程来源
git remote rm origin
步骤3:使用您的用户名和密码重新添加远程源
git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git
git branch --set-upstream master origin/master
如果每次尝试与GitHub交互时Git提示您输入用户名和密码,则可能是您的存储库使用了HTTPS克隆URL。
使用HTTPS远程URL有一些优点:它比SSH更容易设置,并且通常通过严格的防火墙和代理来工作。但是,它还会提示您每次拉出或推送存储库时都输入GitHub凭据。
您可以配置Git为您存储密码。对于Windows:
git config --global credential.helper wincred
运行macOS Cataline 10.15,钥匙串缓存方法不适用于我。我想用https://
不ssh
这对我有用:
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 using bad/illegal format or missing URL
。
希望这可以帮助!
根据您的配置,有不同种类的身份验证。这里有一些:
git credential-osxkeychain
。
如果您的凭证无效,请通过以下方式将其删除:
git credential-osxkeychain erase
要么:
printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
因此,Git不会再询问您钥匙串许可。然后再次配置它。
请参阅:从 GitHub上的OS X钥匙串更新凭证
您的SSH RSA密钥。
为此,您需要将您的SSH密钥与添加的密钥进行比较,如果使用的是正确的身份,则按ssh-add -L
/进行检查ssh-add -l
。
您的HTTPS身份验证(如果您使用的https
不是ssh
协议)。
使用~/.netrc
(%HOME%/_netrc
在Windows上)提供您的凭据,例如
machine stash1.mycompany.com
login myusername
password mypassword
了解更多信息:在Stack Overflow 与GitHub同步。
网址中有错字会使Git询问您用户名和密码,愚蠢的Git。
它已在Kali Linux,Git 2.7.0版,
尝试:
git clone https://github.com/thisrepodoesntexists/doesntexists.git
首先打开.git/config
文件以确保地址看起来像:
protocol://something@url
例如.git / config用于Azure DevOps:
[remote "origin"]
url = https://mystore@dev.azure.com/mystore/myproject/
fetch = +refs/heads/*:refs/remotes/origin/*
如果问题仍然存在,请打开Windows Credentials Manager,单击名为Windows Credentials的保险箱。删除所有与git相关的凭据。
现在,下次您登录git时,它将不再消失。
如果您已设置SSH代理,则也可以将其添加到您的列表中,~/.gitconfig
以强制git将SSH用于所有GitHub存储库而不是HTTPS:
[url "ssh://git@github.com/"]
insteadOf = git://github.com/
insteadOf = https://github.com/
(如果您主要使用公共仓库,则也可以使用pushInsteadOf
而不是insteadOf
,因为从公共仓库读取数据无需身份验证即可完成)。