CURL SSH 密钥密码安全
Posted
技术标签:
【中文标题】CURL SSH 密钥密码安全【英文标题】:CURL SSH Key passphrase safety 【发布时间】:2013-08-09 00:17:26 【问题描述】:我只是想使用 curl 将我的一些文件 scp/sftp 传送到远程盒子,并且想知道如果我不能使用 ssh 代理,如何准确地保护我的私钥的密码安全并且只能使用密钥文件本身。我的知识是确实没有办法做到这一点,但我希望我错了。
编辑:更多描述
我已经生成 ssh 密钥来登录我的远程盒子,我在密钥上放了一个密码,我想使用这个密钥通过 libcurl 登录远程盒子并将CURLOPT_SSH_PRIVATE_KEYFILE
设置为正确的密钥文件,但是然后我必须设置CURLOPT_KEYPASSWD
,因为我设置了一个密码,据我所知,它必须是纯文本,这对我来说似乎不是很安全。也许它不是问题?
【问题讨论】:
只是出去让公众看看他们是否得到我的源代码 什么源代码?我认为你应该更详细地描述你的场景。 您可以使用 ssh-copy-key 一次来存储您的 ssh 密钥,然后只使用基于密钥的身份验证而不是密码吗? 【参考方案1】:您可以将密码以加密形式存储在某处。从您存储的任何地方读取加密的密码,对其进行解密,将CURLOPT_KEYPASSWD
设置为解密的密码,使用 curl 访问远程框,然后取消设置 CURLOPT_KEYPASSWD
仍然不能保护你免受真正坚定的入侵者的伤害,但它会让你很烦人,以至于让偶然的入侵者无法尝试。
【讨论】:
【参考方案2】:如果您想要完全自动化的身份验证,那么身份验证凭据必须存储在某个地方。
通常,如果您对某台机器具有 root 访问权限,那么您可以读取任何内容,包括其他人主目录中的私钥文件。
因此,引入了密码短语来加密集中存储上的那些私钥文件。然后,当您在自己的机器上挂载共享主目录时(大概只有您拥有 root 权限),使用密码并对其进行解密是安全的。然后将真正的密钥临时存储在内存中(理论上 root 可以访问它)。
如果您使用 ssh-agent,那么它会将您的密码(需要解密密钥文件)保存在内存中,该密码在重新启动时会被删除,您需要重新输入密码。
现在,如果您需要使用curl
(或其他任何方式)进行非交互式身份验证,那么获取解密密钥文件的所有信息都需要在机器上的某个地方。如果您是唯一对该计算机具有 root 访问权限的人,那么无需密码即可安全地存储它。
如果不是……那么除非您希望在每次访问时手动输入密码短语,否则您将无法获得完全安全(即使这样,root 也可能很讨厌,ptrace
您获取密码短语的过程)。在这种情况下,我建议您将密码文件放在易失性存储中(例如/dev/shm
)并拒绝除您自己以外的所有人访问。 Root 仍然可以读取它。不过,每次重新启动时都需要重复此操作。
【讨论】:
是的,我以为我有一种感觉,没有办法真正保护它:/哦,好吧以上是关于CURL SSH 密钥密码安全的主要内容,如果未能解决你的问题,请参考以下文章