私钥无法解锁的原因可能是什么?

自从我一段时间前更新到Ubuntu 17.10以后,我的私钥 - 我用来通过ssh访问服务器的那些 - 在登录后不再自动解锁。

enter image description here

我的理解是,通常情况下,seahorse客户端应该负责这个问题,当您第一次输入密码时,会询问您是否要存储密钥的密码。
我最初的猜测是,seahorse-daemon由于某种原因没有运行,但实际上它是在运行的。
user@Zeus:~$ ps aux | grep seahorse
user    19170  0.0  0.1 432636 26564 ?        Ss   00:07   0:00 seahorse-daemon

我的第二个猜测是,由于某种原因,我必须删除在“密码→登录”下存储的所有相关密码: enter image description here

我希望强制客户端再次询问我,然后再次存储它们。但这也没有帮助。客户端没有弹出询问我...

然后我找到了这个可能相关的问题,但对我没有帮助: 在登录时仅输入一次密码解锁 Ubuntu 上的所有私钥

由于其他密码的管理按预期工作(例如 nautilus、Chromium、Nextcloud 等的密码),我认为该问题与 ssh-agent 有关...

有谁能指点我正确的方向,如何解决这个问题?GNOME 处理密码的方式是否有任何改变?也许在升级过程中未能安装一些新奇的程序?

更新 当我再次使用以下命令将私钥添加到身份验证代理时:

ssh-add ~/.ssh/id_rsa

当我尝试登录时,系统会要求我解锁密钥,只需解锁一次,之后密钥将自动解锁。但这仅在下一次重启之前有效。重新启动后,我必须再次添加密钥...

我也突然在使用Ubuntu 17.10时被要求输入密码来解锁ssh密钥。接受的答案对我没有帮助(只在重启前有效)。这里是一个明显的重复问题。 - Alexey
海马加密其数据,你猜对了,就是用你的密码(通常情况下)。无密码登录,比如使用密钥的ssh、指纹识别器等,会将解密操作推迟到需要时再询问你。当问题出现时,你是否将ssh登录方式从密码切换为密钥? - ubfan1
3个回答

是的,ssh-agent就是答案。要保存密码短语,你只需要做以下操作:
ssh-add ~/.ssh/id_rsa

然后输入您的密码,重新登录。

这只在下次重启之前有效。 - Alexey
@Alexey 是的,我可以确认它只在下次重启之前有效。目前还没有找到解决办法。 - user5950
ssh-agent 在登录会话期间运行,并在您结束它以确保安全性时终止。如果它持久存在于重新启动过程中,而您的帐户密码被破解,那么攻击者突然就可以访问您的 RSA 身份,从而获取您可以访问的每台机器。这将是一个恶意的安全漏洞。但是,有一些变通方法,但以减少您的账户安全为代价。请参阅 https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt - darksky

将SSH密钥代理(GNOME Keyring: SSH Agent)添加到启动应用程序中解决了我的问题。

enter image description here


第一选项

启动 SSH 代理:

ssh-agent

添加ssh密钥:
ssh-add ~/.ssh/id_rsa

为了在重启后保持持久性,自动启动ssh-agent,请将以下行添加到您的.bash_profile文件中:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

第二个选项

将以下内容添加到您的 .bashrc 或 .zshrc 文件中:

if [ ! -S ~/.ssh/ssh_auth_sock ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock
ssh-add -l > /dev/null || ssh-add

这应该只在每次重新启动后的第一次登录时提示输入密码。只要ssh-agent保持运行,它将继续重复使用相同的ssh-agent。

谢谢,这个变通方法看起来好像有效,但我很好奇,是什么原因导致它首次停止工作的?它在过去十年里一直都能正常运行... 在采取变通方法之前,我想找出原因。 - user5950