繁体   English   中英

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

[英]Git keeps asking me for my ssh key passphrase

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

可能是什么原因?

使用以下命令启动 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

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

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

Host *
    UseKeychain yes

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

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

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

Host *
  UseKeychain yes

我会尝试以下操作:

  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 上对我有用的是(我从第一个 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

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

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

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

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

start-ssh-agent.cmd

如果你的ssh代理没有设置,可以admin打开PowerShell,设置为手动模式

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

运行以下命令:

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

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

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

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

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

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

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

ssh-add --apple-use-keychain

-K 和 -A 标志已弃用,并分别由 --apple-use-keychain 和 --apple-load-keychain 标志取代。


稍后编辑:您可能需要将ssh-add --apple-load-keychain -q到您的.bash_profile.bashrc.zshrc或等效文件中。

我有一个类似的问题,但其他答案并没有解决我的问题。 我想我会提前 go 并发布这个以防其他人像我一样有一个古怪的设置。

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

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

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

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

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

对于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-agent,请键入ssh-add ~/path/to/my_key

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

如果您使用的是 Win10:

我有同样的问题。 (以前由于不同的问题不得不使用这里的脚本单独更新 ssh-agent)

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

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

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

(详情在此链接中)

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

这个想法是:

  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

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

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

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

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

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

这对我有用。

如果您碰巧使用的是鱼,那么有一个要点

# 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

也许不是解决此问题的最安全方法,但不要设置密码,它是可选的。 如果你不设置密码,它不会要求它。 您可以更改密码

$ 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.

似乎您的本地存储库尚未更新为 ssh 密钥...至少这是我从 https 到 ssh 时发生的情况。

你做过远程重置吗?

git remote set-url origin <ssh url>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM