升级之前
当我每台计算机运行git clone git@...(使用ssh)时,每重新启动一次,就会出现一个窗口对话框,其中包含用于插入我的SSH密码的文本框,并单击OK确认。然后,直到我的系统下次启动时,才不再需要密码短语。
升级到13.10后
升级到Ubuntu 13.10后,该窗口不再出现,但是终端上出现一条消息:
Enter passphrase for key '/home/username/.ssh/id_rsa': 

...每次克隆git存储库时都会出现。
如何解决此问题?我只想输入一次密码。

评论

我认为您必须为此使用ssh-add命令。你试过了吗?

我尝试了ssh-agent bash + ssh-add。那只能工作几分钟。

我毕竟有同样的问题。我认为这可能是OpenSSH的ssh-agent和Gnome Keyring守护程序之间的冲突。

相关错误:bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169

将AddKeysToAgent yes添加到.ssh / config对我有用。

#1 楼


更新:似乎是来自13.10的错误:

https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169



无论如何运行以下命令,此问题已为我解决:

如何解决

我通过输入以下命令来解决此问题:

$ ssh-agent bash


这将创建一个新的bash进程,允许您添加私钥。添加新的私钥时,系统将提示您输入一次密码短语,并且只有一次。

然后:

$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa: 
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)


...其中username是您的用户名。您可以使用$USER变量执行相同的操作:

$ ssh-add /home/$USER/.ssh/id_rsa


或者,仅将~用于主目录。

$ ssh-add ~/.ssh/id_rsa


问题已经解决。

评论


这根本解决不了问题。它只会将身份添加到代理,直到您退出终端。如果打开新终端,则必须再次ssh-add。

– devius
13年11月11日在12:15

因此,请澄清一下:使用此“修复”,您不必再次在该终端中键入密码。打开新终端的那一刻-您将不得不再次输入密码。

–harijay
2014年2月6日15:33

我尝试了$ ssh-add /home/username/.ssh/id_rsa(没有ssh-agent bash),即使重新打开终端,它也对我有用。但对我来说,完整的解决方案是这个stackoverflow.com/a/4246809/532252。即使重新启动机器,一切都没问题。

– kishie
2014年2月19日7:49

我只是在终端输入ssh-add。无需切换到ssh-agent bash或指定id_rsa文件

– henry74
2014年4月10日在19:27

对我来说,这不能解决问题,因为如果我关闭终端然后重新打开,那么它仍然会要求输入密码。

–加里汀
20年6月2日,12:13

#2 楼

0)简短答案

在您的.ssh/config开头添加一行:还不够,请检查您的ssh版本并检查ssh-agent是否已加载以下说明:

1)检查openssh版本

首先检查您的ssh版本,它必须大于等于7.2:

AddKeysToAgent yes


2)编辑配置文件

如果是这种情况,只需在.ssh/config中添加一行即可开始:

ssh -V


3)检查ssh-agent是否已经打开

通常,发行版会自动加载ssh-agent。要检查它,请运行

AddKeysToAgent yes


如果看不到包含它的任何行,则需要通过运行以下命令来加载它:

ps aux | grep -v grep | grep ssh-agent


请注意,这仅在当前终端上启用代理,因此要在任何地方启用该代理,您可以尝试在~/.profile文件中添加此行并重新启动。

评论


AddKeysToAgent是的,是2016年后的标准答案–正是大多数现代用户正在寻求的答案。这是2017年中。 Ubuntu> = 16.04(Xenial Xerus)现在是一个合理的假设。现在,大多数狂野的OpenSSH安装都支持此选项。其他所有对此问题的回答所倡导的特殊的shell脚本合并都是这样...passé。

– Cecil咖喱
17年8月16日在4:16



这应该是公认的答案

– Simernes
19年5月6日,11:58

所以这对我来说不起作用,在18.04中。需要明确的是,这在每个会话中都起作用一次,但是并不能使其在重新启动后持续存在。

– SCdF
19年11月7日在14:28

#3 楼

这份Atlassian文档(archive.org备份)为我在Ubuntu 14.04 Server Edition上解决了该问题:
只需将此值添加到您的.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
 

登录后,它只要求输入一次密码并进行缓存。您不需要每次都输入。

评论


这似乎适用于其他发行版,例如我刚刚在Sabayon Linux上成功使用了此答案。

–乔什·平托(Josh Pinto)
2015年11月20日下午5:08

谢谢!该解决方案在ubuntu系统上对我有用,因为dbus-daemon的问题,gnome-keyring-daemon无法使用。具体来说,我得到这些错误“ **消息:无法连接到dbus会话总线:如果没有X11的$ DISPLAY,则无法自动启动dbus守护程序”,并且在设置了显示环境变量后,我得到了“ **消息:无法无法连接到dbus会话总线:// bin / dbus-launch异常终止,出现以下错误:自动启动错误:X11初始化失败。

–user207863
16-2-26在17:05

这需要更多的支持,可以很好地解决虚拟化Ubuntu 16.04上的问题。

–尼尔斯·库伦杰斯(Niels Keurentjes)
16年7月31日在21:35

这也为我在Windows的Bash上解决了该问题。我尝试多次启动Bash,但它记得密码。尚未尝试重新启动。

– Amr
16-11-27在4:53

在尝试了所有其他解决方案之后,这对我有用。这应该是OP的解决方案

–JoãoPimentel Ferreira
17年8月14日在19:23

#4 楼

此错误的解决方法是将以下内容添加到~/.bashrc的底部

eval `gnome-keyring-daemon --start`


评论


gnome钥匙圈不应该只是您会话的一部分吗?

– PavelŠimerda
2014年11月30日15:09

如果您在谈论“应该”,那么,如果一切都那么完美,那么这个问题就不应放在首位。

–安瓦尔
16年5月8日在17:35

不知道这是否属于.bashrc。看起来您必须将其添加到一些DE配置文件中

–德米特里·金茨堡(Dmitry Ginzburg)
16年11月7日在7:48

#5 楼

鱼壳的用户可以使用此脚本执行相同的操作。

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end


#6 楼

我花了太长时间才能使其在WSL2 Ubuntu 20.04上运行。最后,我们需要在生成新控制台时启动ssh-agent,但不要加载任何按键。首次使用时加载密钥,然后使用AddKeysToAgent
~/.bashrc~/.zshrc的末尾添加以下内容:
SSH_ENV="$HOME/.ssh/agent-environment"

function start_agent {
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
}

if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi


请注意,此处的/usr/bin/ssh-add;故意缺失,比较
原始脚本。

并在~/.ssh/config文件末尾添加以下内容:
Host *
   AddKeysToAgent yes


#7 楼

我用这个:

vim ~/.profile

eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO


#8 楼

如果您使用azure .ppk文件

,只需将其转换为pem并通过简单的步骤添加权限400:

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>


#9 楼

在Ubuntu 18.04上,打开会话X时会启动ssh-agent,它在文件/ etc / X11 / Xsession中进行管理。options:

# cat /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus


#10 楼

另一种解决方案是使用钥匙串。手册页。

钥匙串可帮助您以方便,安全的方式管理SSH和GPG钥匙。它充当ssh-agent和ssh-add的前端,但是使您可以轻松地在每个系统上拥有一个长时间运行的ssh-agent进程,而不是每个登录会话仅使用一个ssh-agent的规范。
这大大减少了您需要输入密码的次数。