【发布时间】:2012-04-19 10:05:59
【问题描述】:
我按照 github 教程中的说明创建了密钥,在 github 上注册了它们,并尝试显式使用 ssh-agent — 但每次我尝试拉取或推送时,git 都会继续询问我的密码。
可能是什么原因?
【问题讨论】:
我按照 github 教程中的说明创建了密钥,在 github 上注册了它们,并尝试显式使用 ssh-agent — 但每次我尝试拉取或推送时,git 都会继续询问我的密码。
可能是什么原因?
【问题讨论】:
一旦你启动了 SSH 代理:
eval $(ssh-agent)
做任何一个:
要将您的私钥添加到其中:
ssh-add
这只会询问你一次密码,然后你应该被允许推送,前提是你将公钥上传到 Github。
在 macOS 上添加和永久保存您的密钥:
ssh-add -K
这将在您关闭并通过将其存储在用户的钥匙串中重新打开后将其保留。
在 Ubuntu(或同等设备)上添加并永久保存您的密钥:
ssh-add ~/.ssh/id_rsa
【讨论】:
git pull,再次提示我输入密码。
ssh-add -K 将在您关闭并通过将其存储在用户的钥匙串中重新打开后保留它。
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/…
自从从 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 但在终端重启后它仍然无法工作...谢谢。
如果您已尝试使用ssh-add,但仍提示您输入密码,请尝试使用ssh-add -K。这会将您的密码短语添加到您的钥匙串中。
更新:如果您使用的是 macOS Sierra,那么您可能需要执行另一个步骤,因为上述步骤可能不再有效。将以下内容添加到您的~/.ssh/config:
Host *
UseKeychain yes
【讨论】:
我会尝试以下方法:
~/.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
【讨论】:
zsh。只需将此添加到.zshrc
id_rsa。如果您有自定义名称,则应使用例如。 /usr/bin/ssh-add ~/.ssh/custom_filename
在 Windows 上对我有用的是(我从第一个 repo 克隆了代码):
eval $(ssh-agent)
ssh-add
git pull
它最后一次询问我的密码
【讨论】:
ssh-add /c/Users/you_user/.ssh/id_rsa_abcxyz
尝试将其添加到您的 ~/.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
【讨论】:
运行以下命令:
eval $(ssh-agent) && ssh-add ~/.ssh/id_rsa &>/dev/null
输入密码,然后检查 git。 Git 不应在此命令后要求输入密码。
原文出处:https://gist.github.com/egoens/c3aa494fc246bb4828e517407d56718d
【讨论】:
我遇到了类似的问题,但其他答案并没有解决我的问题。我想我会继续发布这个,以防万一其他人像我一样搞砸了。
原来我有多个密钥,而 Git 首先使用了错误的密钥。它会提示我输入密码,我会输入它,然后 Git 会使用另一个可以工作的密钥(我不需要输入密码)。
我刚刚删除了它用来提示我输入密码的密钥,现在它可以工作了!
【讨论】:
如果你没有使用 GitBash 并且在 Windows 上 - 你需要使用这个命令来启动你的 ssh-agent
start-ssh-agent.cmd
如果您的 ssh 代理未设置,您可以以管理员身份打开 PowerShell 并将其设置为手动模式
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
【讨论】:
听起来您可能在使用 SSH-Agent 本身时遇到了问题。我会尝试排除故障。
1) 您是否通过 ssh-add 将您的密钥添加到 SSH?
2) 您是否在两次使用之间关闭了终端窗口,因为如果您关闭窗口,您将不得不在重新打开它时再次输入密码。
【讨论】:
对于 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 进程将继续运行,直到您注销、关闭计算机或终止该进程。
【讨论】:
我尝试了不同的解决方案,但没有任何帮助。但是来自 Bitbucket.com 接缝的这个步骤 (My GitBash SSH environment always asks for my passphrase, what can I do?) 效果很好:
想法是:
你创建~/.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
重新运行 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 密钥每次都需要密码并且您想跳过它,那么您可以在下面尝试,它对我来说很好用
主机 *
AddKeysToAgent 是
使用钥匙串是
身份文件 ~/.ssh/id_rsa
【讨论】:
使用 SSH 而不是 HTTPS 更新源远程的 url;
git remote set-url origin "SSH URL COPIED FROM GIT REPO."
这对我有用。
【讨论】:
如果你碰巧用的是鱼,这里有一个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
【讨论】:
将远程重置为 ssh
git remote set-url origin git@github.com:Jmzgit/Moving.git
似乎服务器需要再次接收密钥更新
【讨论】: