我找到了各种使用 、 等方法来缓存 SSH 密钥密码的ssh-agent
解决keychain
方案gpg-agent
。它们似乎都会在每次登录或每次会话时缓存它,因此每次重新启动计算机时,您都必须重新输入 SSH 密码(但后续 SSH 不会要求您输入密码,直到您重新启动)。
我不希望缓存在重新启动时被清除。我想输入密码一次,并且绝不即使我关闭计算机,也会再次被要求。我怎样才能做到这一点?
如果有必要的话,我会使用 Manjaro。
答案1
我同意@terdon,让计算机记住密码短语相当于没有密码短语。
不过,还有其他选择。将 PAM 配置为使用 ssh 密码而不是密码来登录。这样你只需要输入一个密码就可以了,比较方便。
另外:配置ssh使用多轮加密,这样解密你的密钥需要大约一秒钟的时间,这会让你的密码更短更安全。使用一个好的易于输入、易于记忆、难以猜出的密码。
答案2
答案3
我同时遇到了这个问题这个类似的问题在询问 Ubuntu,我在那里发布的修复程序也可能适用于此处。 (我从这里.)
最主要的是,此修复仅适用于您使用 Seahorse(又名密码和密钥)、GNOME 密钥环的 GUI 前端。 Seahorse 在 Ubuntu 和其他 Linux 发行版上默认启用。如果您使用 Seahorse,则可以调用命令行可执行文件ssh-askpass
,它会提示您输入给定 SSH 密钥的密码,然后将该密码保存在 GNOME 密钥环中。 (macOS 也有类似的过程,我将在下面介绍 Seahorse 的过程。)
编辑:似乎更重要的事情是进入 Seahorse GUI,单击 OpenSSH 密钥,右键单击有问题的密钥,选择“为安全 Shell 配置密钥...”,然后添加每个服务器和用户名使用密钥。我今天早些时候(在跑步之前)做过这件事,
ssh-askpass
但完全忘记了。奇怪的是,这部分过程似乎并没有提示输入密码。
要在 Seahorse 中保存 SSH 密钥的密码,请使用以下命令:
$ <seahorse_ssh-askpass> <key_path>
您要确保使用ssh-askpass
与 Seahorse 相关的文件,它可能不会在每个系统上都位于同一个位置,但在我的情况下(Ubuntu 20.10)如下:
$ /usr/libexec/seahorse/ssh-askpass <key_path>
如果此可执行位置在您的系统上不起作用,您可以尝试以下操作:
$ locate ssh-askpass | grep seahorse
这将列出ssh-askpass
名称和seahorse
路径中包含的所有文件和目录。 (您可能需要安装并设置mlocate
在您的系统上运行此命令之前。)
SSH 密钥最常见的路径是~/.ssh/id_rsa
,但您可以检查 Seahorse GUI 以查看是否是其他路径。就我而言,我使用了以下命令:
$ /usr/libexec/seahorse/ssh-askpass ~/.ssh/alpha_rsa
如果成功执行该命令,将会弹出一个对话框,列出 SSH 密钥的名称并询问您的密码。就我而言,我得到了瓦拉错误说它无法抓取键盘,并且我输入的密码被打印到终端,但是当我的 GNOME 密钥环解锁时,此命令似乎成功地使特定的 SSH 密钥自动解锁。
顺便说一句,如果您不希望这是一个明显的安全漏洞,那么值得确保您的 GNOME 密钥环在您打开计算机时不会在没有密码的情况下自动解锁。就我而言,我有一个带有密码的 YubiKey,在 Linux 启动之前我必须输入该密码。您还需要确保计算机在不使用时自动锁定。但假设您必须输入密码才能启动或登录并解锁计算机(即将其从睡眠状态唤醒),那么保存在 GNOME 密钥环中的任何 SSH 密码都应该与 GNOME 密钥环中的其他任何密码一样安全。
如果您使用的是 macOS,则可以使用类似的过程将 SSH 密钥密码保存在 macOS 钥匙串中,该密码使用用户的登录密码进行加密。
假设您已经在 中设置了 SSH 密钥,您可以通过在终端中输入以下内容来~/.ssh
编辑 SSH文件:config
% nano ~/.ssh/config
在文件顶部粘贴以下内容:
Host *
AddKeysToAgent yes
UseKeychain yes
您可以使用 SSH 文件执行更多操作config
,但我从以下位置获得了此特定配置德里克·拉米雷斯 (Derik Ramirez) 的这篇博文。 (请注意,虽然AddKeysToAgent
适用于 macOS 以外的平台,但UseKeyChain
不适用于。)
输入 control-o 保存您的 SSH config
,然后输入 control-x 退出nano
并返回到 shell 提示符。您应该能够config
立即使用新的 SSH,并且下次输入 SSH 密钥密码时,它应该保存到您的登录钥匙串中(因此您之后无需再次输入)。