Git不断提示我input密码

我已经使用Git了一段时间,但不断的要求input密码正在开始把我推上墙。

我正在使用OSX和Github,并且按照GitHub的Set Up Git页面的指示设置了Git和SSH密钥。 我还在GitHub的SSH密钥密码页面中提到了github SSH密钥到我的Mac OSX钥匙串。 我的公钥是用Git注册的。

不过,每次我尝试拉扯,我必须input我的用户名和密码。 除了需要为此设置的SSH密钥,还有其他的东西吗?

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

打开.git/config并find[remote“origin”]部分。 确保你使用的是SSH

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

而不是httpsgit

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

您现在可以使用SSH Key而不是usernamepassword

[编辑:]如果Git抱怨'origin' has already been added'origin' has already been added ,打开.config文件并在[remote origin]之后编辑url = "..."

configurationcredential.helper

在OS X上(现在是macOS)在terminal中运行

 git config --global credential.helper osxkeychain 

它使git能够使用Keychain.app来存储用户名和密码,并从钥匙串中检索你私钥的密钥。

对于Windows使用:

 git config --global credential.helper wincred 

故障排除

如果git凭证助手configuration正确,macOS会将密钥保存在keychain中。 有时, ssh和钥匙串中存储的密码之间的连接可能会中断。 运行ssh-add -K或者ssh-add ~/.ssh/id_rsa再次将key添加到keychain。

macOS 10.12 Sierra变更为ssh

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

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

从10.12.2的ssh_config man页:

UseKeychain

在macOS上,指定系统在尝试使用特定密钥时是否应在用户的钥匙串中search密码短语。 当用户提供密码短语时,该选项还指定密码短语是否应该存储到密钥链中,一旦经过validation是正确的。 争论必须是“是”或“否”。 默认是“否”。

苹果已经增加了Technote 2449解释发生了什么。

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

我升级到macOS Sierra时发生在我身上。 看起来像升级ssh代理清除。

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

简单地运行ssh-addfind我现有的身份,input密码,然后再次进入。

使用这个:用合适的主机名replacegithub.com

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

正如其他人所说,你可以安装一个密码caching助手。 我主要是想发布其他平台的链接,而不仅仅是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) 

指导git在Windows和Github使用SSH推/拉http://nathanj.github.io/gitguide/tour.html

  1. 下载并安装腻子
  2. 设置环境variables'GIT_SSH'='path \ to \ plink.exe'(在已安装的putty文件夹中) – 非常重要!
  3. RESTART WINDOWS EXPLORER Envvariables生效(不仅可以重新启动命令提示符)
  4. 运行puttygen.exe生成新密钥,将PUBLIC密钥复制到Github站点
  5. 将这个新的PRIVATE键保存在磁盘上的某个安全的地方(最好不要使用dropbox)
  6. 运行putty.exe并将SSH连接到github.co
  7. 通过运行“shell:startup”快速启动文件夹。 8通过浏览器使你的私钥启动。 在启动文件夹中创build一个语法为“path \ to \ pageant.exe”“path \ to \ privatekey”的快捷方式
  8. 我们不需要在我们的仓库的.git / config里设置'puttykeyfile'设置
  9. 非常重要的是使用Github的“SSH克隆URL”而不是Https

在git 1.7.9+的窗口中,在命令提示符下运行以下命令,在文本编辑器中打开configuration文件:

  git config --global --edit 

然后在文件中添加下面的块,如果不存在或相应地编辑它

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

保存并closures文件。 上述变更后,您只需要提供一次crendentials。

我想你解决了你的问题,但是我没有看到这个帮助我的解决scheme,所以在这里。

inputterminal:

 echo "" > ~/.ssh/known_hosts 

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

orkoden关于在你的terminal上使用git的钥匙串的答案是不完整的,并引发了错误。 这是你必须做的,以保存你在钥匙链terminalinput的用户名和密码:

 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 

然后input

 git config --global credential.helper osxkeychain 

如果你已经在curl之前用git config完成了这个部分,那没问题,它会工作的

正如上面所说的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的一个好方法就是进入你的项目页面并点击它

将HTTPS更改为SSH以获取正确的URL

然后将此URL添加到configuration文件。

第一步:检查你的当前configuration

 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 

第二步:删除你的远程起源

 git remote rm origin 

第三步:添加远程用户名和密码

 git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git 

我同意“codehugger”,并使用“orkoden”的指令为我工作 – 在netbeans 7.3 – 当你右键单击文件并select上下文菜单 – 推 – 打开“推到远程”窗口 – 有2选项在这里

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

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

正如你可以看到的差异是在url的原始参数 – 你不想select这个选项(1)你想检查选项(2),这对我来说工作得很好。 我希望这可以帮助别人。

粪勒。

 git config credential.helper store 

注意:虽然这很方便,但Git会将您的凭证以明文方式存储在项目目录下的本地文件(.git-credentials)中(请参阅下面的“主目录”)。 如果你不喜欢这个,删除这个文件并切换到使用caching选项。

如果您希望Git每次需要连接到远程存储库时都继续询问您的凭据,则可以运行以下命令:

 git config --unset credential.helper 

要将.git凭证中的密码存储在您的%HOME%目录中,而不是项目目录中,请使用–global标志

 git config --global credential.helper store 

找谁来问你密码。 是git还是你的SSH代理?

在我的情况下,每次我做了git pull它是问我:

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

所以我认为这是git要求密码。 所以我一直在寻找解决办法,后来才意识到我的SSH代理已经closures了。 这可以解决这里给出的。

这是我犯的一个非常愚蠢的错误,但把它张贴在这里,以防万一,像我一样,帮助别人省下一些时间从错误的树上咆哮。

根据您的configuration有不同的authentication。 这里有几个:

  1. git credential-osxkeychain

    如果您的凭证无效,请通过以下方式将其删除:

     git credential-osxkeychain erase 

    要么:

     printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase 

    所以git不会再要求你获得钥匙串许可。 然后再configuration一次。

    请参阅: 从 GitHub上的OSX钥匙串更新凭证

  2. 您的SSH RSA密钥。

    为此,您需要将您的SSH密钥与您添加的密钥进行比较,如果您使用的是正确的身份,请通过ssh-add -L / ssh-add -l进行检查。

  3. 您的HTTPS身份validation(如果您使用https而不是ssh协议)。

    使用~/.netrc (Windows的%HOME%/_netrc )来提供你的证书,例如

     machine stash1.mycompany.com login myusername password mypassword 

    了解更多信息: 与 SO 同步GitHub

在使用github的密钥之前,请按照教程中的步骤testingSSH连接 :

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

在URL中input错误将会让git询问你的用户名和密码,愚蠢的混帐

在Linux Kali,Git 2.7.0版上testing

尝试:

git clone https://github.com/thisrepodoesntexists/doesntexists.git

使用以下命令增加超时时间,以便您可以重新input密码一段时间

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

我用它的Bitbucket和Github它都适用。 只有你需要做的是3600是在几秒钟内,增加它到你想要的程度。我把它改为259200这是大约30天。 这样我每30天左右重新input一次密码。