如何为无人参与的进程保存SSH密钥密码?
我已经创建了密码短语保护的RSA密钥。 公钥安装在用户的.ssh
目录的authorized_keys
中的远程服务器上。
从请求服务器,我可以没有问题地SSH到远程服务器,但我每次执行此操作时都需要输入密码。
我想使用此密钥将Munin服务器连接到Munin节点并获取数据,因此该过程因密码短语而失败。
我想到了两个选择:
- 从密钥中删除密码。
- 将密码短语保存在某处,可能在配置文件中?
有更好的解决方案吗?
我认为ssh-agent
应该做这样的事情,但我找不到关于它的简明信息。
您可以使用ssh-agent
执行此操作。 它允许您将密码短语存储在内存中,而不是存储在磁盘上。 这里有批处理作业的一个很好的解释: http : //www.akadia.com/services/ssh_agent.html 。
基本上,你:
- 在后台运行
ssh-agent
,作为将启动SSH连接的用户。 - 使用
ssh-add
命令将密钥添加到代理。 它会提示输入密码。
您可以通过将ssh-agent
添加到启动时运行的脚本来自动运行ssh-agent
,但仍需要使用密钥手动填充代理以输入密码。 因此,如果您重新启动,例如,您将不得不记得这样做。
考虑到这是一个自动化系统,需要考虑的是通过对所使用的密钥进行密码来实现的目的。
- 如果您使用带密码的密钥并将其存储在配置文件中,那么获得密钥访问权限的任何人都可能有权访问配置文件,因为它们都需要由同一用户访问。
- 如果您使用
ssh-agent
存储密码短语,那么它仍然需要在与密钥相同的计算机上运行。 从文件中获取密码短语比从文件中获取更难,但是你只是让他们的工作更难而不是不可能。 但是,如果他们获得密钥而无法访问计算机(例如,从备份),则此选项更安全。 - 如果您根本没有设置密码短语,那么获得密钥的人就无需再进行任何工作即可使用密码短语。
在所有这三种情况中,您应该明智地做出更坏的计划,并采取措施尽量减少获得可用密钥访问权限的人可能造成的损害。 例如,您可以:
- 使用只能访问正在检索的数据的特定用户帐户。
- 使用仅用于此目的的密钥。
- 限制密钥所有者可以SSH的主机。
- 限制使用密钥可以运行的命令 – 请参阅此处 。
总的来说,只有你可以权衡这些方法的优缺点,以及在你的情况下手动过程是否可以接受。