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