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

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

可能是什么原因?

364320 次浏览

听起来你可能有麻烦与SSH代理本身。我会尝试排除故障。

1)您是否执行ssh-add以将密钥添加到SSH?

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

一旦您开始使用SSH代理:

eval $(ssh-agent)

或者:

  1. 要添加您的私钥:

     ssh-add
    

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

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

     ssh-add -K
    

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

    如果您看到有关deprecated标志的警告,请尝试新的变体:

     ssh-add --apple-use-keychain
    
  3. 要在ubuntu(或等效)上永久添加和保存密钥:

      ssh-add ~/.ssh/id_rsa
    

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

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

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

我会尝试以下方法:

  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. 输入您的密码

在Windows上对我有用的是(我从存储库1中克隆了代码):

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

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

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

Host *
UseKeychain yes

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

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

Host *
UseKeychain yes

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

尝试将其添加到您的~/. ssh/config接口说明

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

…假设您的私钥名为id_rsa

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

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

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

我尝试了不同的解决方案,但没有任何帮助。但是来自Bitbucket.com接缝的这个步骤(我的GitBashSSH环境总是询问我的密码,我该怎么办?)效果很好:

这个想法是:

  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

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

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

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

start-ssh-agent.cmd

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

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

在mac上, 如果你的ssh密钥每次都需要密码,你想跳过它,那么你可以试试下面,它对我很有效

  1. "$(ssh代理-s)"
  2. ssh-add-K. ssh/id_rsa
  3. 添加此默认ssh配置对我有用

主机*
AddKeysToAgent是
使用钥匙串是
id_rsa

对于windowsLinux用户,在github文档上描述了一种可能的解决方案,为了您的方便,我在下面报告。

您可以在打开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代理,请键入ssh-add ~/path/to/my_key

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

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

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

这对我有用。

如果您在Win10上:

我也遇到了同样的问题。 (以前由于不同的问题,必须使用这里的脚本单独更新ssh代理)

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

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

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

(详情见链接

如果你碰巧使用鱼,有一个要点

# 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

运行以下命令:

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

输入密码,然后选中git。Git不应在此命令后请求密码。

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

似乎你的本地存储库没有使用ssh密钥更新……至少这是我从https到ssh时发生的事情。

你做了远程重置吗?

git remote set-url origin <ssh url>

以前-K标志用于添加键,但现在:

ssh-add --apple-use-keychain

-K和-A标志已被弃用并被替换 由--appe-use-keychain和--appe-load-keychain #36825;的标志。


后期编辑:您可能需要将ssh-add --apple-load-keychain -q添加到您的.bash_profile.bashrc.zshrc或同等功能。

也许不是最安全的方法来解决这个问题,但简单地不要设置密码,它是可选的。如果你不设置密码,它就不会要求它。您可以使用

$ ssh-keygen -p -f ~/.ssh/id_ed25519
> Enter old passphrase: [Type old passphrase]
> Key has comment 'your_email@example.com'
> Enter new passphrase (empty for no passphrase): [Type new passphrase]
> Enter same passphrase again: [Repeat the new passphrase]
> Your identification has been saved with the new passphrase.

Idk如果有人需要不同的东西,但这对我有很大帮助 https://stackoverflow.com/a/6445525/11891580

对我来说,每次重启时,我都必须运行ssh-add --apple-use-keychain来加载凭据,所以我将此命令添加到堆栈溢出答案中,现在它已修复