简短回答

简短回答

升级前

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

升级到 13.10 后

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

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

...每次克隆 git 存储库时都会出现这种情况。

我该如何解决这个问题?我只想输入一次密码。

答案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

问题已经解决。

答案2

简短回答

使用添加密钥到代理.ssh/config并在开头添加以下内容:

AddKeysToAgent yes

并运行 git/ssh/... 如果这还不够,请检查你的 ssh 版本并检查 ssh-agent 是否按照以下说明加载:

1)检查openssh版本

首先检查你的 ssh 版本,必须是大于或等于 7.2

ssh -V

2)编辑配置文件

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

AddKeysToAgent yes

其他选项包括no(默认)yesconfirm(可选后跟时间间隔)ask或时间间隔。

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

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

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

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

eval $(ssh-agent)

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

答案3

本 Atlassian 文档archive.org 备份)在 Ubuntu 14.04 服务器版本上为我修复了这个问题:

只需将这些值添加到您的.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

登录后,只需输入一次密码并缓存。您无需每次都输入密码。

答案4

我花了很长时间才让它在 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

相关内容