Git一直提示我输入密码

时间:2011-10-14 20:24:18

标签: git github

我现在已经使用Git一段时间了,但是不断要求输入密码开始让我陷入困境。

我正在使用OSX和Github,我按照GitHub Set Up Git page的指示设置了Git和我的SSH密钥。我还在我的Mac OSX钥匙串中添加了github SSH密钥,如GitHub's SSH key passphrases page所述。我的公钥已在Git注册。

然而,每当我尝试git pull时,我都要输入我的用户名和密码。我需要为此设置除SSH密钥以外的东西吗?

28 个答案:

答案 0 :(得分:723)

我想你可能有错误的git repo url。

打开.git/config并找到[远程“原点”]部分。确保您使用的是SSH

ssh://git@github.com/username/repo.git

如果点击clone or download并选择ssh

,您可以在回购的主页面中看到ssh网址

而不是httpsgit一个:

https://github.com/username/repo.git
git://github.com/username/repo.git

您现在可以使用 SSH Key而不是usernamepassword进行验证。

[编辑:] 如果Git抱怨'origin' has already been added,请打开.config文件,然后在url = "..."之后编辑[remote origin]部分{{1} 1}}

答案 1 :(得分:515)

配置credential.helper

在OS X(现在是macOS)上,在终端

中运行它
git config --global credential.helper osxkeychain

它使git能够使用Keychain.app存储用户名和密码,并从密钥链中将密码短语检索到私有ssh密钥。

对于Windows使用:

git config --global credential.helper wincred

故障排除

如果正确配置了git凭证帮助程序,macOS会将密码保存在密钥链中。有时connection between ssh and the passphrases stored in the keychain会破坏。运行ssh-add -Kssh-add ~/.ssh/id_rsa将密钥再次添加到钥匙串。

macOS 10.12 Sierra更改为ssh

对于macOS 10.12 Sierra ssh-add -K需要在每次重启后运行。为避免这种情况,请使用此内容创建~/.ssh/config

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

来自10.12.2的ssh_config man页面:

  

<强> UseKeychain

     

在macOS上,指定系统在尝试使用特定键时是否应在用户的钥匙串中搜索密码。当用户提供密码短语时,此选项还指定密码短语一旦被验证为正确,是否应存储在密钥链中。论证必须是“是”或“否”。默认值为“no”。

Apple添加了Technote 2449来解释发生了什么。

  

在macOS Sierra之前,ssh会显示一个对话框,询问您的密码,并提供将其存储到钥匙串中的选项。此UI已在不久前弃用,已被删除。

答案 2 :(得分:120)

当我升级到macOS Sierra时发生了这种情况。看起来ssh代理在升级时已被清除。

$ ssh-add -L
The agent has no identities.

只需运行ssh-add找到我现有的身份,输入密码即可再次使用。

答案 3 :(得分:62)

使用此选项:将github.com替换为相应的主机名

git remote set-url origin git@github.com:user/repo.git

答案 4 :(得分:39)

正如其他人所说,您可以安装密码缓存助手。我大多只想发布其他平台的链接,而不仅仅是mac。我正在运行Linux服务器,这很有帮助: https://help.github.com/articles/caching-your-github-password-in-git/#platform-linux

对于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)

答案 5 :(得分:17)

还要找谁问你的密码短语。是git还是你的SSH代理?

就我而言,每次我git pull时都会问我:

Enter passphrase for key '/work/username/.ssh/id_rsa':

所以我认为是git要求密码。所以我一直在寻找解决方案,后来才意识到我的SSH代理已经关闭了。可以使用eval $(ssh-agent)ssh-add作为给定here.

来修复哪个问题

此外,我会粘贴到您的〜/ .bashrc(或等效内容)下面的一小段内容,以确保您的登录时启动了ssh-agent。

在任何情况下,这都是我犯的一个非常愚蠢的错误,但是在这里发布,以防万一它可以帮助别人节省一些时间来咆哮错误的树,就像我一样。

# 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

答案 6 :(得分:13)

Linux

注意:虽然这很方便,但Git会将您的凭据以明文形式存储在项目目录下的本地文件(.git-credentials)中(请参阅下面的&#34; home&#34;目录)。如果您不喜欢这样,请删除此文件并切换到使用缓存选项。

如果您希望Git在每次需要连接到远程存储库时都要求您提供凭据,则可以运行以下命令:

git config credential.helper store

将密码存储在%HOME%目录中的.git-credentials中而不是项目目录中:使用--global标志

git config --unset credential.helper

答案 7 :(得分:9)

使用SSH推送/拉取git on windows和Github的指南 http://nathanj.github.io/gitguide/tour.html

  1. 下载并安装putty
  2. 设置环境变量'GIT_SSH'='path \ to \ plink.exe'(在已安装的putty文件夹中) - 非常重要!!!
  3. 重启WINDOWS EXPLORER以使Env变量生效(不仅可以重启命令提示符)
  4. 运行puttygen.exe以生成新密钥,将PUBLIC密钥复制到Github站点
  5. 将此新的私钥保存在磁盘上的安全位置(最好不是保管箱)
  6. 运行putty.exe并将SSH连接到github.co
  7. 通过运行“shell:startup”快速进入启动文件夹。 8通过pageant使用Windows启动私钥。在Startup文件夹中创建一个快捷方式,其语法为“path \ to \ pageant.exe”“path \ to \ privatekey”
  8. 我们不需要在我们的回购站的.git / config中设置'puttykeyfile'设置
  9. 非常重要的是使用了Github的“SSH克隆URL”而不是Https

答案 8 :(得分:8)

在windows for git 1.7.9+中,在命令提示符下运行以下命令,在文本编辑器中打开配置文件:

    git config --global --edit

然后在文件中添加以下块(如果不存在)或相应地编辑

    [credential "https://giturl.com"]
        username = <user id>
        helper = wincred

保存并关闭文件。 在上述更改后,您只需提供一次凭证。

答案 9 :(得分:6)

使用以下命令增加超时时间,以便您可以重新键入密码

git config --global credential.helper 'cache --timeout 3600'

我将它用于Bitbucket和Github它适用于两者。你唯一需要做的就是 3600以秒为单位,将其增加到您想要的任何程度。我将其更改为259200大约30天。这样我每隔30天就会重新输入一次密码。

答案 10 :(得分:4)

我认为你已经解决了问题,但是我没有看到这里的解决方案对我有帮助,所以在这里。

输入终端:

echo "" > ~/.ssh/known_hosts

这将清空您的known_hosts文件,您必须添加您使用并连接的每个主机,但它解决了问题。

答案 11 :(得分:4)

我有同样的问题。 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

希望它现在可以正常工作。

答案 12 :(得分:4)

如果您想stop Git from always asking来获取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

答案 13 :(得分:3)

如上所述static_rtti,请更改

https://github.com/username/repo.git
git://github.com/username/repo.git

ssh://git@github.com/username/repo.git

我自己将.git / config文件中的https更改为ssh,但它仍然无效。然后我看到你必须将github.com改为git@github.com。获取实际正确URL的一个好方法是转到项目页面并单击此

Change HTTPS to SSH to get the right URL

然后将此URL添加到配置文件中。

答案 14 :(得分:3)

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 config完成了部分,那就没问题了,它会起作用

答案 15 :(得分:3)

运行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

希望这会有所帮助!

答案 16 :(得分:2)

第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

答案 17 :(得分:2)

我同意“codehugger”并使用“orkoden”的说明它对我有用 - 在netbeans 7.3上 - 右键单击​​文件并选择上下文菜单 - 按下 - 打开“推送到远程”窗口 - 这里有2个选项

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

  3. 正如你所看到的那样,区别在于url中的origin param - 你不想选择这个选项(1)你想检查选项(2),这对我来说很合适。我希望这有助于某人。

    Dung Le。

答案 18 :(得分:1)

从某种意义上讲,我觉得static_rtti提供的答案是不可靠的。不知道这是否较早可用,但是Git工具现在提供凭据存储。

缓存模式

$ git config --global credential.helper cache

使用“缓存”模式将凭据保留在内存中一定时间。密码从未存储在磁盘上,并且在15分钟后会从缓存中清除。

存储模式

$ git config --global credential.helper 'store --file ~/.my-credentials'

使用“存储”模式将凭据保存到磁盘上的纯文本文件中,它们永远不会过期。

我个人使用了商店模式。删除我的存储库,将其克隆,然后必须输入我的凭据一次。

参考:https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

答案 19 :(得分:1)

如果您使用https协议,Git会提示您输入密码。如果您使用ssh,它将使用您的私钥进行身份验证,而不是要求输入密码。 (https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account

这是解决方法:

git remote -v

这将显示来源的网址。并且您会在此URL中注意到https。 (示例:https://github.com/PrestaShop/PrestaShop.git

现在,您只需要先删除它,然后使用ssh

添加网址即可

git remote remove origin

git remote add origin git@github.com:PrestaShop/PrestaShop.git

答案 20 :(得分:1)

在Linux的Windows子系统(WSL)上,这是我发现可以使用的唯一解决方案:

eval`ssh-agent` ; ssh-add ~/.ssh/id_rsa

这是ssh-agent无法在WSL中正确注册的问题。

答案 21 :(得分:1)

如果每次尝试与GitHub进行交互时Git提示您输入用户名和密码,则可能是您的存储库使用了HTTPS克隆URL。

使用HTTPS远程URL具有一些优点:它比SSH容易设置,并且通常通过严格的防火墙和代理来工作。但是,它还会提示您每次拉出或推送存储库时都输入GitHub凭据。

您可以配置Git为您存储密码。 对于Windows

git config --global credential.helper wincred

答案 22 :(得分:1)

如果你正在使用Windows并且这突然在GitHub上突然开始发生,那可能是由于Github最近在{201} 02-22发布的disabling support for deprecated cryptographic algorithms,在这种情况下解决方案只是下载并安装完整Git for Windows的最新版本 或只是Git Credential Manager for Windows

答案 23 :(得分:1)

在使用github密钥之前,请按照教程Testing your SSH connection中的此步骤操作:

$ ssh -T git@github.com
# Attempts to ssh to GitHub

答案 24 :(得分:0)

Microsoft Stack解决方案(Windows和Azure DevOps)

首先打开.git/config文件,以确保地址看起来像:

protocol://something@url

例如.git / config for Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

如果问题仍然存在,请打开Windows 凭据管理器,单击名为 Windows凭据的保险箱,并删除所有与git相关的凭据。

现在,下次登录git时,它将不再消失。

答案 25 :(得分:0)

如果已设置SSH代理,还可以将其添加到~/.gitconfig中,以强制git将SSH用于所有GitHub存储库而不是HTTPS:

[url "ssh://git@github.com/"]
    insteadOf = git://github.com/
    insteadOf = https://github.com/

(如果您主要使用公共存储库,则也可以使用pushInsteadOf而不是insteadOf,因为从公共存储库读取内容无需身份验证即可完成。)

答案 26 :(得分:0)

我遇到了这个问题。一个回购协议要求我每次输入凭证。我所有其他的回购协议都不要求我提供证书。他们甚至被设置为在相同的帐户凭据下使用HTTPS跟踪GitLab,因此奇怪的是,除了一个之外,它们都工作正常。

对比.git / config文件,我发现导致问题的URL有两个主要区别:

是否要求提供凭据:

https://gitlab.com/myaccount/myproject

不要求提供凭据:

https://myaccount@gitlab.com/myaccount/myproject.git 

因此,添加“ myaccount @”和“ .git”解决了我的问题。

答案 27 :(得分:0)

就我而言,当我尝试cherrypick如下所示的 URL 时,总是收到密码提示:

git fetch http://username@gerrit-domainname/repositoryname refs/changes/1/12345/1 && git cherry-pick FETCH_HEAD

当在不同的机器上挑选时,这个 URL 运行良好。但是,当我尝试使用 正确密码 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 网址以 git fetch ... 开头,因此,此解决方案可能适用于网址以 git fetch ... 开头的 git checkout/download