1

我只是在玩使用 curl 将我的一些文件 scp/sftp 到远程盒子的想法,并且想知道如果我不能使用 ssh-agent 并且只能使用 ssh-agent 来确保我的私钥安全使用密钥文件本身。我的知识是真的没有办法做到这一点,但我希望我错了。

编辑:更多描述

我已经生成了 ssh 密钥来登录我的远程盒子,我在密钥上放了一个密码,我想使用这个密钥通过 libcurl 登录远程盒子并设置CURLOPT_SSH_PRIVATE_KEYFILE为正确的密钥文件,但是我必须设置CURLOPT_KEYPASSWD因为我设置了一个密码,据我所知,它只能是纯文本,这对我来说似乎不太安全。也许它不是问题?

4

2 回答 2

0

您可以将密码以加密形式存储在某处。从存储它的任何地方读取加密的密码,解密,设置CURLOPT_KEYPASSWD为解密的密码,使用 curl 访问远程框,然后取消设置CURLOPT_KEYPASSWD

仍然不能保护你免受真正坚定的入侵者的伤害,但它会让你很烦人,以至于让偶然的入侵者无法尝试。

于 2013-08-08T17:45:20.637 回答
0

如果您想要完全自动化的身份验证,则身份验证凭据必须存储在某个地方。

通常,如果您对某些机器具有 root 访问权限,那么您可以读取任何内容,包括其他人主目录中的私钥文件。

出于这个原因,引入了密码短语来加密集中存储上的那些私钥文件。然后,当您在自己的机器上挂载一个共享主目录(大概只有您拥有 root 权限)时,可以安全地使用密码并对其进行解密。然后将真正的密钥临时存储在内存中(理论上 root 可以访问它)。

如果您使用 ssh-agent,那么它会将您的密码(需要解密密钥文件)保存在内存中,该密码在重新启动时会被删除,您需要重新输入密码。

现在,如果您需要使用curl(或其他任何方式)进行非交互式身份验证,那么获取解密密钥文件的所有信息都需要在机器上的某个地方。如果您是唯一对该机器具有 root 访问权限的人,那么无需密码就可以安全地存储它。

如果不是……那么除非您希望在每次访问时手动输入密码短语,否则您将无法获得完全安全(即使这样,root 也可能很讨厌,并且ptrace您获取密码短语的过程)。在这种情况下,我建议您将密码文件放在易失性存储中(/dev/shm例如),并拒绝除您自己以外的所有人访问。Root 仍然可以读取它。不过,每次重新启动时都需要重复此操作。

于 2013-08-07T16:14:10.047 回答