当前位置: 首页>>技术教程>>正文


输入一次SSH密码

, , , ,

问题描述

升级之前

当我在每台计算机重新启动时运行git clone git@...(使用ssh)时,出现一个窗口对话框,其中包含一个用于插入我的SSH密码的文本框,并使用“确定”进行确认。然后,直到我的系统下一次启动时,不再需要密码。

升级到13.10后

升级到Ubuntu 13.10后,该窗口不再出现,但在终端显示一条消息:

Enter passphrase for key '/home/username/.ssh/id_rsa': 

每当克隆一个git仓库时,都会出现。

我怎样才能解决这个问题?我只想输入一次密码。

最佳解决思路

Update: seems to be a bug from 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

问题解决了。

次佳解决思路

This Atlassian document在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

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

第三种解决思路

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

eval `gnome-keyring-daemon --start`

第四种思路

0)简短的回答

在开头添加.ssh/config一行:

AddKeysToAgent yes

并运行git /ssh /…如果这还不够,请检查您的ssh版本并检查ssh-agent是否已加载以下指令:

1)检查openssh版本

首先检查你的ssh版本,它必须是greater of equal to 7.2

ssh -V

2)编辑配置文件

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

AddKeysToAgent yes

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

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

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

如果您没有看到包含它的任何行,则需要通过运行来加载它:

eval $(ssh-agent)

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

第五种思路

fish shell的用户可以使用这个script来做同样的事情。

# 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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/658.html,未经允许,请勿转载。