如何一次性输入 ssh 密码密钥

如何一次性输入 ssh 密码密钥

我已经为 ssh 设置了一个无密码设置,使用公钥认证来连接所需的远程服务器,一切都运行良好。

我正在使用密码来解锁私钥,使用这个解决方案— 问题是每次我启动系统时它都会询问密码。

我觉得这很麻烦,我只想输入一劳永逸所以下次启动会话时,我不需要再次输入它,是否有类似缓存密钥的东西可以保存我的密码并在整个会话中工作(重启后也能保留)?

是否有可能在保持我的 ssh 密码完整的同时实现所有这些功能?

答案1

您想使用keychain

keychain程序管理密钥缓存程序的一个实例ssh-agentssh-agent启动时,会创建两个环境变量以供评估。通常,当关闭已ssh-agent启动的 shell 时,这些环境变量会丢失。该keychain程序会在登录时跟踪这些变量,并在~\.keychain目录中提供 shell 脚本。

有多种方法可以运行keychain,其中一种方法是从命令行手动运行。每次启动 shell 时,使用:

eval `keychain --eval`

这将查找ssh-agent它是否正在运行,如果未运行则启动它。无论哪种方式,使用 eval onkeychain都会设置必要的环境变量,您可以在其中使用以下命令添加键:

ssh-add <private-keyfile>

如果private-keyfile有密码,则在执行期间会提示您输入该密码ssh-add,但只要ssh-agent正在运行,这将是您最后一次需要输入私钥的密码。

因为的 evalkeychain设置了SSH_AUTH_SOCK环境变量,所以的任何运行ssh都将使用ssh-agent来完成身份验证。

另一个建议是将keychain执行添加到您的.bashrc文件中,如此 StackExchange 答案

要终止,keychain只需输入命令:

keychain --stop mine

或者如果您想关闭的所有实例ssh-agent,请输入以下命令:

keychain --stop all

请注意,使用诸如ssh-agent通过将这些经过身份验证的密钥存储在内存中来破坏密码私钥文件的安全性的服务。这并不安全,尤其是在内存侧信道攻击的情况下。如果您对密钥安全性不感兴趣,更简单的解决方案是按照@vidarlo的建议删除私钥上的密码。

答案2

运行ssh-keygen -p。这将允许您删除密钥上设置的密码。如果没有设置密码,它将以明文形式存储,您无需解锁即可使用它:

$ ssh-keygen -p 
Enter file in which the key is (/home/user/.ssh/id_rsa): 
Enter old passphrase: 
Key has comment ''
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

当提示输入密码时,只需按 Enter 即可设置无密码。之后,您就可以自由使用您的密钥了。

答案3

简单的答案是“不”。
如果重启后仍保持这种状态,那就违背了目的(即保护)。
但是,您可以在登录会话甚至多个终端之间保持这种状态。

  • 如果您希望跨登录会话维持,但可以每个终端输入一次密码,则添加eval $(ssh-add).bash_profile

  • 如果您想要在每次系统重启时执行一次此操作,安装钥匙串,请更改您的~/.ssh/config文件以将钥匙串添加到钥匙串(AddKeysToAgent yes)并执行上述步骤。

相关内容