如何为无人参与的进程保存SSH密钥密码?

我已经创建了密码短语保护的RSA密钥。 公钥安装在用户的.ssh目录的authorized_keys中的远程服务器上。

从请求服务器,我可以没有问题地SSH到远程服务器,但我每次执行此操作时都需要输入密码。

我想使用此密钥将Munin服务器连接到Munin节点并获取数据,因此该过程因密码短语而失败。

我想到了两个选择:

  1. 从密钥中删除密码。
  2. 将密码短语保存在某处,可能在配置文件中?

有更好的解决方案吗?

我认为ssh-agent应该做这样的事情,但我找不到关于它的简明信息。

您可以使用ssh-agent执行此操作。 它允许您将密码短语存储在内存中,而不是存储在磁盘上。 这里有批处理作业的一个很好的解释: http : //www.akadia.com/services/ssh_agent.html 。

基本上,你:

  1. 在后台运行ssh-agent ,作为将启动SSH连接的用户。
  2. 使用ssh-add命令将密钥添加到代理。 它会提示输入密码。

您可以通过将ssh-agent添加到启动时运行的脚本来自动运行ssh-agent ,但仍需要使用密钥手动填充代理以输入密码。 因此,如果您重新启动,例如,您将不得不记得这样做。

考虑到这是一个自动化系统,需要考虑的是通过对所使用的密钥进行密码来实现的目的。

  1. 如果您使用带密码的密钥并将其存储在配置文件中,那么获得密钥访问权限的任何人都可能有权访问配置文件,因为它们都需要由同一用户访问。
  2. 如果您使用ssh-agent存储密码短语,那么它仍然需要在与密钥相同的计算机上运行。 从文件中获取密码短语比从文件中获取更难,但是你只是让他们的工作更难而不是不可能。 但是,如果他们获得密钥而无法访问计算机(例如,从备份),则此选项更安全。
  3. 如果您根本没有设置密码短语,那么获得密钥的人就无需再进行任何工作即可使用密码短语。

在所有这三种情况中,您应该明智地做出更坏的计划,并采取措施尽量减少获得可用密钥访问权限的人可能造成的损害。 例如,您可以:

  • 使用只能访问正在检索的数据的特定用户帐户。
  • 使用仅用于此目的的密钥。
  • 限制密钥所有者可以SSH的主机。
  • 限制使用密钥可以运行的命令 – 请参阅此处 。

总的来说,只有你可以权衡这些方法的优缺点,以及在你的情况下手动过程是否可以接受。