如何为无人值守进程保存 SSH 密钥密码?

如何为无人值守进程保存 SSH 密钥密码?

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

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

我想使用此密钥通过 Munin 服务器 SSH 进入 Munin 节点并获取数据,但该过程因密码而失败。

我想到两个选择:

  1. 从密钥中删除密码。
  2. 将密码保存在某处,也许是在配置文件中?

有没有更好的解决办法?

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

答案1

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

本质上,您:

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

您可以通过将其添加到启动时运行的脚本来自动运行ssh-agent,但您仍然需要手动使用密钥启动代理才能输入密码。因此,例如,如果您重新启动,您必须记住执行此操作。

需要考虑的问题是,鉴于这是一个自动化系统,您在使用的密钥上设置密码想要实现什么目的。

  1. 如果您使用带有密码的密钥并将其存储在配置文件中,那么任何获得该密钥访问权限的人也可能有权访问该配置文件,因为它们都需要由同一个用户访问。
  2. 如果您使用ssh-agent来存储密码,那么它仍然需要与密钥在同一台机器上运行。从内存中获取密码比从文件中获取密码更困难,但您只是让他们的工作变得更加困难,而不是不可能。但是,如果他们在没有访问机器的情况下获得密钥(例如,从备份中),那么这个选项更安全。
  3. 如果您根本没有设置密码,那么获得密钥的人无需做进一步的工作就可以使用它。

在这三种情况下,明智的做法是做好最坏的打算,并采取措施将获得可用密钥的人可能造成的损害降至最低。例如,您可以:

  • 使用仅具有正在检索的数据的访问权限的特定用户帐户。
  • 使用仅用于此目的的密钥。
  • 限制密钥所有者可以从哪些主机进行 SSH 操作。
  • 限制使用密钥可以运行的命令 - 请参阅

总的来说,只有您才能权衡这些方法的利弊,以及在您的环境下手动流程是否可行。

相关内容