Git不断询问我ssh密钥密码


Answers:


1038

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

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

    ssh-add
    

    这将只询问您一次密码短语,然后,只要您将公钥上传到Github,就应该允许您输入密码。

  2. 要在macOS上永久保存密钥:

    ssh-add -K  
    

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


16
注销服务器,重新登录ssh,运行git pull,再次提示我输入密码。
cyber8200

35
ssh-add -K将在您关闭后将其保留并通过将其存储在用户的钥匙串中将其重新打开。
柯克

72
@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.
Sandeep

13
无论如何,我仍然会提示输入密码。
IgorGanapolsky'3

21
-K是苹果特有的。参见help.github.com/articles/…–
bkdir

238

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

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

Host *
    UseKeychain yes

相关:自从我更新到Sierra以来,macOS一直在询问我的ssh密码


1
为我工作...谢谢。我已经完成了... ssh-add -K /Users/***/.ssh/git/id_rsa但是在终端重启后它仍然无法正常工作...谢谢。
nawlbergs

2
想为什么会这样?阅读有关OpenSSH更改的技术说明developer.apple.com/library/content/technotes/tn2449/…–
samwize

62

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

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

Host *
  UseKeychain yes

2
仍然提示我输入密码。
IgorGanapolsky'3

@IgorGanapolsky您在使用macOS Sierra吗?如果是这样,请查看我刚刚添加到答案中的内容。希望对您有所帮助。
Darryl Young

2
是的,我在塞拉利昂。但是,以下这行代码也对我有用
IgorGanapolsky

1
这也适用于BitBucket Cloud。我在GitKraken中遇到问题,这解决了我的问题。
玛拉基

54

我会尝试以下方法:

  1. 启动GitBash
  2. 编辑~/.bashrc档案
  3. 将以下行添加到文件

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
以供将来参考,它也可与一起使用zsh。只需将其添加到.zshrc
Arda

2
我相信这假设您的密钥文件已被调用id_rsa。如果您有一个自定义名称,则应使用例如。/usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen

2
您能解释一下该脚本发生了什么吗?
LeeR '18

2
@Lee如果尚未运行ssh-agent,它将启动ssh-agent,这可以确保在每次推送(或多或少)时都不会询问您ssh密码。
罗兰

这仅运行ssh-agent并在每次登录时添加密钥。每次登录时仍然需要输入密码。因此,例如,如果您有脚本ssh-ing和执行GIT命令,那么不幸的是根本没有用。
trainoasis



6

我遇到了类似的问题,但是其他答案并没有解决我的问题。我以为我会继续发布此消息,以防其他人像我一样搞怪设置。

原来我有多个键,而Git首先使用的是错误的键。它会提示我输入密码,然后输入密码,然后Git将使用可以使用的其他密钥(不需要输入密码)。

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


5

听起来您可能无法使用SSH-Agent本身。我会尝试排除故障。

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

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


2
添加有关如何解决第一个问题Jeff Welling的信息会很好。
ranu

5

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

要从私钥创建公钥:

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

1

我尝试其他解决方案,但没有帮助。但是从Bitbucket.com接缝处的此步骤(我的GitBash SSH环境始终要求输入密码短语,我该怎么办?)工作良好:

这个想法是:

  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


1

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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.