Git一直提示我输入密码

Cat*_*ine 619 git github

我已经使用Git一段时间了,但是不断要求输入密码开始让我感到困惑.

我正在使用OSX和Github,我按照GitHub的Set Up Git页面的指示设置了Git和我的SSH密钥 .我还在我的Mac OSX钥匙串中添加了github SSH密钥,如GitHub的SSH密钥密码页面所述.我的公钥是在Git注册的.

不过,每次我尝试git pull,我都要输入我的用户名和密码.我需要为此设置除SSH密钥以外的其他东西吗?

sta*_*tti 770

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

打开.git/config并找到[远程"原点"]部分.确保你使用的https是:

ssh://git@github.com/username/repo.git
Run Code Online (Sandbox Code Playgroud)

如果单击git并选择,您可以在回购的主页面中看到ssh url'origin' has already been added

而不是一个.configurl = "..."一个:

https://github.com/username/repo.git
git://github.com/username/repo.git
Run Code Online (Sandbox Code Playgroud)

您现在可以[remote origin]而不是url = ssh://github/username/repo.git和验证.git/config.

[编辑:]如果Git的抱怨https,打开git的文件和编辑'origin' has already been added后的部分.config作为url = "..."

  • 只是拼出这个(因为我需要它):打开.git/config并在`[remote"origin"]`section set中设置`url = ssh:// git @ github.com/username/Repo.git`.这对我有用. (90认同)
  • 奇怪的是,@ GregK的解决方案对我不起作用,但是`url = git@github.com:organization/Repo.git`确实有效.+1导致我走正路!成功! (12认同)
  • 修复.git/config文件中的url,使用git-remote修复它,或删除本地repo并使用正确的URL再次克隆它. (8认同)
  • 这可能是它.当我调用git remote -v时,我得到:origin https://github.com/Foo/Bar.git(fetch)origin https://github.com/Foo/Bar.git(push),而使用SSH则似乎它应该是:origin git@github.com:Foo/Bar.git(fetch)origin git@github.com:Foo/Bar.git(push)这可能是因为我最初使用GitHub的Mac应用程序检出了我的项目(http://mac.github.com/).知道如何解决它吗? (4认同)
  • 我无法强调使用ssh:// git @ github/[username]/[reponame]对CLONE有多重要.git你想使用密钥访问GIT而不是每次都输入你的用户名和密码.我发现修复它的唯一方法是删除本地仓库并再次克隆$ git clone ssh:// git @ github/[username]/[reponame] .git (2认同)
  • @GeneM.我很确定你可以简单地在.git/gitrc中更改克隆的原始URL以避免重新克隆. (2认同)
  • 只是添加这对我有用,但我没有在ssh github url中包含`ssh://`前缀.也就是说,我只需将网址设置为`git@github.com:username/repo.git` (2认同)
  • `权限被拒绝(公钥)。致命:无法从远程存储库读取。` (2认同)

ork*_*den 539

配置credential.helper

在OS X(现在是macOS)上,在终端中运行它

git config --global credential.helper osxkeychain
Run Code Online (Sandbox Code Playgroud)

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

对于Windows使用:

git config --global credential.helper wincred
Run Code Online (Sandbox Code Playgroud)

故障排除

如果正确配置了git凭证帮助程序,macOS会将密码保存在密钥链中.有时,ssh和存储在钥匙串中的密码之间连接可能会中断.运行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
Run Code Online (Sandbox Code Playgroud)

ssh_config man10.12.2 的页面:

UseKeychain

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

Apple已经添加了Technote 2449,它解释了发生了什么.

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

  • 这是迄今为止最好的方法,因为OSX的Github应用程序(也许是Windows)默认情况下使用https路径进行git repos.使用https而不是ssh/git也有充分的理由,因为出于安全原因,许多公司网络仅允许端口**80**和**443**上的流量. (30认同)
  • +1为keychain.app解决方案.这对我来说很棒**因为我的雇主的git服务器只支持通过apache提供的http,他们强烈反对使用`.netrc`文件方法,它将你的密码放在明文中. (3认同)
  • 注意,我得到错误`'credential-osxkeychain'不是git命令.因为我没有安装凭据帮助器.我按照这里的说明安装它:https://help.github.com/articles/set-up-git#password-caching (3认同)
  • 您需要git 1.7.10或更新版本才能使用凭据帮助程序. (2认同)
  • 感谢Sierra更新,我刚刚更新,无法弄清楚为什么github在我添加`git config --global credential.helper osxkeychain`时一直要求pw.我的`.ssh`目录中的配置文件修复了我. (2认同)
  • @AndreyLuiz嘿,您知道如何在Linux中执行此操作吗? (2认同)

amc*_*mcc 128

当我升级到macOS Sierra时,这发生在我身上.看起来ssh代理在升级后被清除了.

$ ssh-add -L
The agent has no identities.
Run Code Online (Sandbox Code Playgroud)

只需运行ssh-add找到我现有的身份,输入密码就可以了.

  • 由Sierra升级打破+1.请注意,密码是SSH密钥的密码,而不是Mac用户密码. (9认同)

Dar*_*ane 62

使用此:用适当的主机名替换github.com

git remote set-url origin git@github.com:user/repo.git
Run Code Online (Sandbox Code Playgroud)

  • 这工作正常。这很奇怪,带有“git@**”的远程 URL 不会提示凭据,而带有“https@**”的 URL 会提示:)。因此我找到了[这个文档](https://help.github.com/articles/why-is-git-always-asking-for-my-password/)。 (2认同)

Cha*_*rts 48

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

对于mac:

git credential-osxkeychain
Run Code Online (Sandbox Code Playgroud)

视窗:

git config --global credential.helper wincred
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

  • 我不得不向下滚动到第三个答案才能看到Linux指令,这些应该是主要答案,因为它是一个常见的问题. (5认同)

mit*_*aul 19

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

就我而言,每次我这样做git pull都会问我:

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

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

也可以粘贴到您的〜/ .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

Run Code Online (Sandbox Code Playgroud)


小智 15

git config credential.helper store
Run Code Online (Sandbox Code Playgroud)

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

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

git config --unset credential.helper
Run Code Online (Sandbox Code Playgroud)

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

git config --global credential.helper store
Run Code Online (Sandbox Code Playgroud)


Fra*_*ois 10

Windows上的git指南和使用SSH推/拉的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. 将这个新的PRIVATE密钥保存在磁盘上的安全位置(最好不是dropbox)
  6. 运行putty.exe并将SSH连接到github.co
  7. 通过运行"shell:startup"快速进入启动文件夹.8通过pageant使用Windows启动私钥.在Startup文件夹中创建一个快捷方式,其语法为"path\to\pageant.exe""path\to\privatekey"
  8. 我们不需要在我们的repos的.git/config中设置'puttykeyfile'设置
  9. 非常重要的是使用Github的"SSH克隆URL"而不是Https


Roh*_*han 8

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

    git config --global --edit
Run Code Online (Sandbox Code Playgroud)

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

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred
Run Code Online (Sandbox Code Playgroud)

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


小智 8

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

git config --global credential.helper 'cache --timeout 3600'
Run Code Online (Sandbox Code Playgroud)

我用它来制作Bitbucket和Github它适用于两者.你需要做的 3600只是在几秒钟内,将它增加到你想要的任何程度.我把它改为259200大约30天.这样我每隔30天左右重新输入一次密码.

  • 好吧,我发现重启后这不会持续,所以重启后你仍然需要输入密码,不管超时... (2认同)

小智 8

如果您使用该https协议,Git 将提示您输入密码。如果您使用ssh,它将使用您的私钥进行身份验证,而不是要求输入密码

以下是解决此问题的方法:

git remote -v

这将显示来源的网址。你会注意到https这个网址。(这里的例子

现在,您必须先删除它并添加 urlssh

git remote remove origin

git remote add origin git@github.com:PrestaShop/PrestaShop.git
Run Code Online (Sandbox Code Playgroud)


Duc*_*les 7

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

缓存模式

$ git config --global credential.helper cache
Run Code Online (Sandbox Code Playgroud)

使用“缓存”模式将凭证保存在内存中一段时间​​。没有任何密码存储在磁盘上,它们会在 15 分钟后从缓存中清除。

商店模式

$ git config --global credential.helper 'store --file ~/.my-credentials'
Run Code Online (Sandbox Code Playgroud)

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

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

参考:7.14 Git 工具 - 凭证存储

  • 在 Linux 中,这为我完成了“git config --local credential.helper store”的工作。就我而言,我通过 HTTPS,这样我只输入用户名/密码一次,之后,我的凭据将从 ~/.git-credentials 中重复使用 (2认同)

Ahm*_*ies 7

如果你想阻止 Git 总是询问您提供 GitHub 存储库的登录凭据,这可以轻松完成。

使用 SSH 而不是 HTTPS

您可以使用 SSH 而不是 HTTPS 更新源远程“

git remote set-url origin git@github.com:username/your-repo.git
Run Code Online (Sandbox Code Playgroud)

配置 Git 以存储您的密码和用户名

以下是让 Git 存储用户名和密码的方法:

git config --global credential.helper store
Run Code Online (Sandbox Code Playgroud)

接下来,保存会话的用户名和密码:

git config --global credential.helper cache
Run Code Online (Sandbox Code Playgroud)


Emi*_*ano 6

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

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

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

git config --global credential.helper wincred
Run Code Online (Sandbox Code Playgroud)


小智 5

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

输入终端:

echo "" > ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

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

  • `&gt;〜/ .ssh / known_hosts`更短:) (4认同)
  • 如果您需要从 ~/.ssh/known_hosts 中删除主机,有一种比删除文件影响更小的方法。~/.ssh/known_hosts 只是一个文本文件,如果你能在文件中找到有问题的主机,你可以删除它们的行。您可能需要在编辑文件之前对其进行备份。如果文件中只有几个条目,那么将其删除可能不是一个坏主意。我在很多服务器上工作,所以我的 ~/.ssh/known_hosts 中有数百个条目,我还没有准备好将它们全部删除以删除一些条目。 (3认同)
  • @papan这不会阻止git要求我输入密码! (2认同)

Jam*_*tes 5

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

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

ssh-agent 没有在 WSL 中正确注册是一个问题。

  • 已经有一段时间了,但这解决了我的问题。 (2认同)

rag*_*ghu 5

我有同样的问题。MacOS Mojave 钥匙串不断要求输入密码。为了安全起见,您的 id_rsa 应使用密码进行加密。然后尝试将其添加到钥匙串中ssh-add -K ~/.ssh/id_rsa

如果您的密钥位于 ~/.ssh 之外的其他文件夹中,则替换为正确的文件夹。

钥匙串现在知道您的 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
Run Code Online (Sandbox Code Playgroud)

希望它现在应该可以工作了。

更新:-K标志已被弃用。请改用以下内容:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519 # path to private key
Run Code Online (Sandbox Code Playgroud)