输入一次 SSH 密码

Ion*_*zău 153 ssh git passphrase

升级前

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

升级到 13.10 后

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

Enter passphrase for key '/home/username/.ssh/id_rsa': 
Run Code Online (Sandbox Code Playgroud)

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

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

Ion*_*zău 153

更新:似乎是 13.10 的错误:

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


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

怎么修

我通过输入以下命令解决了这个问题:

$ ssh-agent bash
Run Code Online (Sandbox Code Playgroud)

这将创建一个新的 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)
Run Code Online (Sandbox Code Playgroud)

...username你的用户名在哪里。您可以使用$USER变量执行相同的操作:

$ ssh-add /home/$USER/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

或者,仅~用于您的主目录。

$ ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

问题得到了解决。

  • 这根本不能解决问题。它只会将身份添加到代理,直到您退出终端。如果你打开一个新终端,你必须再次`ssh-add`。 (60认同)
  • 我尝试了`$ ssh-add /home/username/.ssh/id_rsa`(没有`ssh-agent bash`),即使在重新打开终端后它也对我有用。但对我来说,完整的解决方案是 http://stackoverflow.com/a/4246809/532252。即使重新启动机器后一切正常。 (9认同)
  • 所以澄清一下:通过这个“修复”,您将不必再次在该终端中输入密码。打开新终端的那一刻 - 您将不得不再次输入密码。 (4认同)

tob*_*ora 80

0) 简答

使用AddKeysToAgent.ssh/config在开头添加以下内容:

AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

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

1)检查openssh版本

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

ssh -V
Run Code Online (Sandbox Code Playgroud)

2)编辑配置文件

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

AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

其他选项是no(默认值)、yesconfirm(可选地后跟时间间隔)ask或时间间隔。

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

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

ps aux | grep -v grep | grep ssh-agent
Run Code Online (Sandbox Code Playgroud)

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

eval $(ssh-agent)
Run Code Online (Sandbox Code Playgroud)

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

  • `AddKeysToAgent yes` 是 2016 年后的规范答案——而且*正是*大多数现代用户正在为之苦恼。现在是 2017 年年中。Ubuntu >= 16.04 (*Xenial Xerus*) 现在是一个合理的假设。大多数 OpenSSH 安装现在都支持这个选项。对这个问题的所有其他答案所提倡的那种特别的 shell 脚本 kludges 是如此...... *passé*。`</sigh>` (19认同)
  • 这应该是公认的答案 (2认同)
  • 所以这对我不起作用,在 18.04。需要明确的是,这在 _per session_ 中有效,但它不会让它在重新启动后持续存在。 (2认同)

Ard*_*rda 40

这个 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
Run Code Online (Sandbox Code Playgroud)

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

  • 这也解决了我在 Bash for Windows 上的问题。我多次尝试启动 Bash,它记住了密码。还没试过重启。 (3认同)
  • 这似乎适用于其他发行版,就像我刚刚在 Sabayon Linux 上成功使用了这个答案一样。 (2认同)
  • 谢谢!这个解决方案在 ubuntu 系统上对我有用,在该系统中 gnome-keyring-daemon 由于 dbus-daemon 问题而无法工作。具体来说,我收到了这些错误“** 消息:无法连接到 dbus 会话总线:无法在没有 X11 的 $DISPLAY 的情况下自动启动 dbus 守护进程”,并且在设置了显示环境变量后,我收到了“** 消息:无法't 连接到 dbus 会话总线://bin/dbus-launch 异常终止并出现以下错误:自动启动错误:X11 初始化失败。” (2认同)
  • 在尝试了所有其他解决方案后,这对我有用。这应该是 OP 的解决方案 (2认同)

小智 21

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

eval `gnome-keyring-daemon --start`
Run Code Online (Sandbox Code Playgroud)

  • gnome 钥匙圈不应该只是您会话的一部分吗? (2认同)

Gre*_*zak 5

我花了太长时间才让它在 WSL2 Ubuntu 20.04 上运行。最后,我们需要在生成新控制台时启动 ssh-agent,但不要加载密钥。首次使用时加载密钥并使用AddKeysToAgent

~/.bashrc在or的末尾添加以下内容~/.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
Run Code Online (Sandbox Code Playgroud)

请注意,/usr/bin/ssh-add;原始脚本相比,这里故意遗漏了。

并在文件末尾添加以下内容~/.ssh/config

Host *
   AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)