ChatGPT解决这个技术问题 Extra ChatGPT

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

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

可能是什么原因?


K
Kostas Minaidis

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

eval $(ssh-agent)

执行以下任一操作:

向其中添加您的私钥: ssh-add 这将只询问您一次密码,然后您应该被允许推送,前提是您将公钥上传到 Github。要在 macOS 上永久添加和保存您的密钥: ssh-add -K 这将在您关闭并通过将其存储在用户的钥匙串中重新打开后保留它。如果您看到有关已弃用标志的警告,请尝试使用新变体: ssh-add --apple-use-keychain 要在 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/…
C
Community

自从从 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/…
D
Darryl Young

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

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

Host *
  UseKeychain yes

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

我会尝试以下方法:

启动 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 命令,不幸的是,这根本没有用。
M
Mohammad Faisal

在 Windows 上对我有用的是(我从 repo 1st 克隆了代码):

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 对我有效时才有效。一旦我关闭它,我需要再次提供凭据
g
geisterfurz007

尝试将此添加到您的 ~/.ssh/config 中:

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

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


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

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

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

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

这是为我做的!谢谢! :)
m
mirushaki

运行以下命令:

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

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

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


C
Chris Karpyszyn

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

start-ssh-agent.cmd

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

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

T
Taryn

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

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

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


J
Jeff Welling

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

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

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


很高兴添加有关如何解决第一个问题 Jeff Welling 的信息。
R
Roberto Amoroso

对于 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 方面很混乱。
t
thowfeeq

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

ssh-add --apple-use-keychain

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


对我来说,这行得通。我试图通过 SSH 导入私有 github 存储库
G
Grady S

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

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
也为我工作,我不再指定用户,只是这个; origin git@github.com/myrepo.git
i
itsapenguinmachine

如果您使用的是 Win10:

我有同样的问题。 (以前必须使用来自 here 的脚本单独更新 ssh-agent,因为存在不同的问题)

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

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

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

(详细信息在此 link 中)


T
Taylor D. Edmiston

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

这个想法是:

您创建 ~/.bashrc 文件添加以下脚本: SSH_ENV=$HOME/.ssh/environment # 启动 ssh-agent 功能 start_agent { echo "Initializing new SSH agent..." # spawn ssh-agent /usr/bin/ssh -代理 | sed 's/^echo/#echo/' > "${SSH_ENV}" echo 成功 chmod 600 "${SSH_ENV}" 。 "${SSH_ENV}" > /dev/null /usr/bin/ssh-add } if [ -f "${SSH_ENV}" ];然后 。 "${SSH_ENV}" > /dev/null ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { 开始代理; } 否则 start_agent;重新运行 Bash


n
neurobot

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

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

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


A
Abdulaziz

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

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

这对我有用。


R
Raydot

如果您碰巧在使用 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

J
Jonathan Heyno

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

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

A
Aurelio Jimenez

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

你做过远程复位吗?

git remote set-url origin <ssh url>