Git一直在问我的ssh密钥密码

时间:2012-04-05 16:33:49

标签: linux git github

我正在使用Linux,我按照github教程中的指示创建了密钥,使用github注册了它们,并尝试明确地使用ssh-agent - 但是每当我尝试执行pull或者git时,git会继续询问我的密码。推动。

可能是什么原因?

18 个答案:

答案 0 :(得分:886)

使用以下命令启动SSH代理后:

eval $(ssh-agent)
  1. 您必须将私钥添加到其中:

    ssh-add
    

    如果您将公钥上传到Github,这只会向您询问您的密码,然后您应该被允许推送。

  2. 永久保存密钥:

    ssh-add -K  
    

    通过将其存储在用户的钥匙串中关闭并重新打开它后,它将保持不变。

答案 1 :(得分:192)

自从从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

答案 2 :(得分:57)

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

更新:如果你正在使用macOS Sierra,那么你可能需要再做一步,因为上面可能不再有效。将以下内容添加到~/.ssh/config

Host *
  UseKeychain yes

答案 3 :(得分:45)

我会尝试以下方法:

  1. 开始GitBash
  2. 修改您的~/.bashrc文件
  3. 将以下行添加到文件
  4. 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
    
    1. 保存并关闭文件
    2. 关闭GitBash
    3. 重新打开GitBash
    4. 输入您的密码

答案 4 :(得分:18)

尝试将此添加到〜/ .ssh / config

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

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

答案 5 :(得分:16)

在Windows上对我有用的是(我从第一次回复中克隆了代码):

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

答案 6 :(得分:6)

我有类似的问题,但其他答案并没有解决我的问题。我想我会继续发布这个以防万一其他人像我一样有一个棘手的设置。

事实证明我有多个键,而Git首先使用了错误的键。它会提示我输入密码,我会输入密码,然后Git会使用一个不同的密钥(我不需要输入密码)。

我刚刚删除了用于提示我输入密码的密钥,现在可以正常使用了!

答案 7 :(得分:5)

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

1)您是否使用ssh-add将密钥添加到SSH?

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

答案 8 :(得分:4)

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

要使用私钥创建公钥:

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

答案 9 :(得分:2)

如果您不使用GitBash且在Windows上-您需要使用此命令启动ssh-agent

start-ssh-agent.cmd

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

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

答案 10 :(得分:1)

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

这个想法是:

  1. 您创建了~/.bashrc文件

  2. 添加以下脚本:

    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
    
  3. 重新运行Bash

答案 11 :(得分:1)

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

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

这对我有用。

答案 12 :(得分:0)

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

  1. 评估“ $(ssh-agent -s)”
  2. ssh-add -K .ssh / id_rsa
  3. 添加此默认ssh配置对我有用

主机*
AddKeysToAgent是
UseKeychain是
IdentityFile〜/ .ssh / id_rsa

答案 13 :(得分:0)

对于 Windows Linux 用户,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进程将继续运行,直到您注销,关闭计算机或终止该进程。

答案 14 :(得分:0)

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

git remote -v

如果遥控器不是以git开头,而是以https开头,则可能需要按照以下示例将其更改为git。

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

答案 15 :(得分:0)

如果您使用的是 Win10:

我遇到了同样的问题。 (以前由于不同的问题,必须使用来自 here 的脚本单独更新 ssh-agent)

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

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

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

(详情在此link

答案 16 :(得分:0)

如果您碰巧使用了fish,则有一个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

答案 17 :(得分:0)

运行以下命令:

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

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

原始来源:https://gist.github.com/egoens/c3aa494fc246bb4828e517407d56718d