Git 不断询问我的 ssh 密钥密码

Posted

技术标签:

【中文标题】Git 不断询问我的 ssh 密钥密码【英文标题】:Git keeps asking me for my ssh key passphrase 【发布时间】:2012-04-19 10:05:59 【问题描述】:

我按照 github 教程中的说明创建了密钥,在 github 上注册了它们,并尝试显式使用 ssh-agent — 但每次我尝试拉取或推送时,git 都会继续询问我的密码。

可能是什么原因?

【问题讨论】:

相关:***.com/questions/14762034/… 【参考方案1】:

一旦你启动了 SSH 代理:

eval $(ssh-agent)

做任何一个:

    要将您的私钥添加到其中:

     ssh-add
    

    这只会询问你一次密码,然后你应该被允许推送,前提是你将公钥上传到 Github。

    在 macOS 上添加和永久保存您的密钥:

     ssh-add -K  
    

    这将在您关闭并通过将其存储在用户的钥匙串中重新打开后将其保留。

    在 Ubuntu(或同等设备)上添加并永久保存您的密钥:

      ssh-add ~/.ssh/id_rsa
    

【讨论】:

注销服务器,重新登录,运行git pull,再次提示我输入密码。 ssh-add -K 将在您关闭并通过将其存储在用户的钥匙串中重新打开后保留它。 @Kirk ssh-add -K 给出以下内容:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider. 无论如何,我仍然会收到提示输入密码。 -K 是苹果特有的。见help.github.com/articles/…【参考方案2】:

自从从 OS X El Capitan (10.11) 升级到 macOS Sierra (10.12) 后重新启动后,这一直发生在我身上。 ssh-add 解决方案暂时有效,但不会在再次重启后持续存在。

永久的解决方案是编辑(或创建)~/.ssh/config 并启用 UseKeychain 选项。

Host *
    UseKeychain yes

相关:macOS keeps asking my ssh passphrase since I updated to Sierra

【讨论】:

为我工作了谢谢...我已经完成了...ssh-add -K /Users/***/.ssh/git/id_rsa 但在终端重启后它仍然无法工作...谢谢。 想知道为什么会这样吗?阅读有关 OpenSSH 更改的技术说明 developer.apple.com/library/content/technotes/tn2449/…【参考方案3】:

如果您已尝试使用ssh-add,但仍提示您输入密码,请尝试使用ssh-add -K。这会将您的密码短语添加到您的钥匙串中。

更新:如果您使用的是 macOS Sierra,那么您可能需要执行另一个步骤,因为上述步骤可能不再有效。将以下内容添加到您的~/.ssh/config

Host *
  UseKeychain yes

【讨论】:

仍然提示我输入密码。 @IgorGanapolsky 您在使用 macOS Sierra 吗?如果是这样,请查看我刚刚添加到答案中的内容。我希望这会有所帮助。 是的,我在 Sierra。但是,这对我也有用:AddKeysToAgent yes 这也适用于 BitBucket Cloud。我在 GitKraken 中遇到问题,这解决了我的问题。【参考方案4】:

我会尝试以下方法:

    开始GitBash 编辑您的~/.bashrc 文件 将以下行添加到文件中

SSH_ENV=$HOME/.ssh/environment

# 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
    保存并关闭文件 关闭 GitBash 重新打开 GitBash 输入您的密码

【讨论】:

为了将来参考,这也适用于zsh。只需将此添加到.zshrc 我相信这是假设您的密钥文件名为id_rsa。如果您有自定义名称,则应使用例如。 /usr/bin/ssh-add ~/.ssh/custom_filename 你能解释一下这个脚本发生了什么吗? @Lee 如果 ssh-agent 尚未运行,它会启动它,这确保不会在每次推送时询问您 ssh 密码(或多或少)。 这只是运行 ssh-agent 并在每次登录时添加密钥。每次登录时,您仍然需要输入密码。因此,例如,如果您有脚本 ssh-ing 并执行 GIT 命令,不幸的是,这根本没有用。【参考方案5】:

在 Windows 上对我有用的是(我从第一个 repo 克隆了代码):

eval $(ssh-agent)
ssh-add 
git pull 

它最后一次询问我的密码

致谢:解决方案取自 https://unix.stackexchange.com/questions/12195/how-to-avoid-being-asked-passphrase-each-time-i-push-to-bitbucket

【讨论】:

如果您使用的是非默认 rsa 文件名,请务必在第二个命令中使用它:ssh-add /c/Users/you_user/.ssh/id_rsa_abcxyz 这只在 gitbash 对我有效时才有效。一旦我关闭它,我需要再次提供凭据【参考方案6】:

尝试将其添加到您的 ~/.ssh/config

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

...假设您的私钥被命名为 id_rsa

【讨论】:

UseKeychain yes 只对mac有效 @Oz123 windows 的等价物是什么 @Oz123 我认为 Windows 上的等价物是 AddKeysToAgent 是的,请检查这个答案***.com/questions/52423626/… 这是一个比其他答案更通用的答案(适用于任何操作系统,除了 UseKeyChain 部分)。恕我直言,我应该是公认的答案。谢谢@IgorGanapolsky 优秀。如果您在 Gitlab、Github 等中有帐户并且您在本地管理项目以推送到这些帐户,您将如何指定多个 ssh 密钥?【参考方案7】:

如果上述解决方案对我不起作用,要检查的一件事是您实际上也拥有公钥(通常是 id_rsa.pub)。不这样做是不寻常的,但这就是我的原因。

从您的私钥创建您的公钥:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

【讨论】:

这是为我做的!谢谢! :)【参考方案8】:

运行以下命令:

eval $(ssh-agent) && ssh-add ~/.ssh/id_rsa &>/dev/null

输入密码,然后检查 git。 Git 不应在此命令后要求输入密码。

原文出处:https://gist.github.com/egoens/c3aa494fc246bb4828e517407d56718d

【讨论】:

【参考方案9】:

我遇到了类似的问题,但其他答案并没有解决我的问题。我想我会继续发布这个,以防万一其他人像我一样搞砸了。

原来我有多个密钥,而 Git 首先使用了错误的密钥。它会提示我输入密码,我会输入它,然后 Git 会使用另一个可以工作的密钥(我不需要输入密码)。

我刚刚删除了它用来提示我输入密码的密钥,现在它可以工作了!

【讨论】:

【参考方案10】:

如果你没有使用 GitBash 并且在 Windows 上 - 你需要使用这个命令来启动你的 ssh-agent

start-ssh-agent.cmd

如果您的 ssh 代理未设置,您可以以管理员身份打开 PowerShell 并将其设置为手动模式

Get-Service -Name ssh-agent | Set-Service -StartupType Manual

【讨论】:

【参考方案11】:

听起来您可能在使用 SSH-Agent 本身时遇到了问题。我会尝试排除故障。

1) 您是否通过 ssh-add 将您的密钥添加到 SSH?

2) 您是否在两次使用之间关闭了终端窗口,因为如果您关闭窗口,您将不得不在重新打开它时再次输入密码。

【讨论】:

很高兴添加有关如何解决第一个问题 Jeff Welling 的信息。【参考方案12】:

对于 WindowsLinux 用户,GitHub Docs 上描述了一种可能的解决方案,为方便起见,我将其报告如下。

您可以在打开 bash 或 Git shell 时自动运行ssh-agent。复制以下行并将它们粘贴到您的 ~/.profile~/.bashrc 文件中:

env=~/.ssh/agent.env

agent_load_env ()  test -f "$env" && . "$env" >| /dev/null ; 

agent_start () 
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; 

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

如果您的私钥未存储在默认位置之一(如~/.ssh/id_rsa),您需要告诉您的 SSH 身份验证代理在哪里可以找到它。要将您的密钥添加到 ssh-agent,请输入 ssh-add ~/path/to/my_key

现在,当您首次运行 Git Bash 时,系统会提示您输入密码。 ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。

【讨论】:

这是Auto-launching ssh-agent on Git for Windows页面上特定部分的链接。注意:您必须选择页面上的“Windows”选项卡才能看到此部分...没有列出 Linux 选项卡,所以我觉得这在 GitHub 方面令人困惑。【参考方案13】:

我尝试了不同的解决方案,但没有任何帮助。但是来自 Bitbucket.com 接缝的这个步骤 (My GitBash SSH environment always asks for my passphrase, what can I do?) 效果很好:

想法是:

    你创建~/.bashrc文件

    添加跟随脚本:

     SSH_ENV=$HOME/.ssh/environment
    
     # 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
    

    重新运行 Bash

【讨论】:

【参考方案14】:

上面没有提到的另一种可能的解决方案是使用以下命令检查您的遥控器:

git remote -v

如果远程不是以 git 开头,而是以 https 开头,您可能需要按照以下示例将其更改为 git。

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed

【讨论】:

这对我有用。就我而言,我错误地将远程设置为 git@github.com 而不是 github.com。【参考方案15】:

如果你在 Win10 上:

我遇到了同样的问题。 (以前必须使用来自here 的脚本单独更新 ssh-agent,因为另一个问题)

Git 确实访问了我的 ssh 配置(当我在 ssh 配置中有无意义的行时,git pull 抛出异常),但似乎从不关心我通过 ssh-agent 添加并在我的配置中引用的私钥。

解决问题的方法是在 PowerShell 中执行以下命令:

git config core.sshCommand (get-command ssh).Source.Replace('\','/')

(详情在此link)

【讨论】:

【参考方案16】:

在 Mac 上, 如果您的 ssh 密钥每次都需要密码并且您想跳过它,那么您可以在下面尝试,它对我来说很好用

    eval "$(ssh-agent -s)" ssh-add -K .ssh/id_rsa 添加此默认 ssh 配置对我有用

主机 * AddKeysToAgent 是 使用钥匙串是 身份文件 ~/.ssh/id_rsa

【讨论】:

【参考方案17】:

使用 SSH 而不是 HTTPS 更新源远程的 url;

git remote set-url origin "SSH URL COPIED FROM GIT REPO."

这对我有用。

【讨论】:

【参考方案18】:

如果你碰巧用的是鱼,这里有一个gist:

# config.fish
if not pgrep -f ssh-agent > /dev/null
  eval (ssh-agent -c)
  set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
  set -Ux SSH_AGENT_PID $SSH_AGENT_PID
  set -Ux SSH_AUTH_SOCK $SSH_AUTH_SOCK
end

【讨论】:

【参考方案19】:

将远程重置为 ssh

git remote set-url origin git@github.com:Jmzgit/Moving.git

似乎服务器需要再次接收密钥更新

【讨论】:

以上是关于Git 不断询问我的 ssh 密钥密码的主要内容,如果未能解决你的问题,请参考以下文章

Bitbucket 上的 Git:即使在上传了我的公共 SSH 密钥之后,也总是要求输入密码

sudo git 作为另一个具有 ssh-agent 的用户进行密钥访问

Git clone / pull 不断冻结在“将密钥存储在缓存中?”

Git一直提示我输入密码

如何输入 Git SSH 密钥的密码?

ssh 密钥密码在 Windows 中有效,但在 linux 中无效