我当时正在尝试使用curl将我的一些文件scp / sftp转移到远程盒子,并且想知道如果我不能使用ssh-agent,如何将我的密码保密到我的私钥安全并且只能使用密钥文件本身。我的知识是,确实没有办法做到这一点,但我希望我错了。
修改:更多说明
我已经生成了ssh密钥登录到我的远程框,我在密钥上放了一个密码,我想用这个密钥登录到libcurl的远程框并将CURLOPT_SSH_PRIVATE_KEYFILE
设置为正确的密钥文件,然而我必须设置CURLOPT_KEYPASSWD
,因为我设置了一个密码,从我理解的只有纯文本,这对我来说似乎不太安全。也许这不是问题?
答案 0 :(得分:0)
如果您需要完全自动身份验证,则必须将身份验证凭据存储在某处。
通常,如果您对某台计算机具有root访问权限,那么您可以在其主目录中读取包括其他人的私钥文件在内的任何内容。
为此,引入了密码短语来加密集中存储上的私钥文件。然后,当您在自己的计算机上安装共享主目录时(可能只有您拥有root权限),可以安全地使用密码并解密它。然后将真实密钥临时存储在内存中(理论上root可以访问它)。
如果您使用ssh-agent,那么它会保留您在重启时删除的内存中的密码(解密密钥文件所需),您需要重新输入密码。
现在,如果您需要使用curl
(或其他任何内容)进行非交互式身份验证,则获取解密密钥文件的所有信息都需要位于计算机上。如果您是唯一一个具有root访问权限的人,那么可以安全地存储它而不使用密码短语。
如果不是......那么除非您希望手动输入每次访问的密码,否则您将无法获得完全安全(即使然后root也可能是令人讨厌的并且ptrace
您的进程获取密码短语)。在这种情况下,我建议您将密码短语文件放在易失性存储(例如/dev/shm
)中,并拒绝除自己访问之外的所有人。 Root仍然可以阅读它。这需要在每次重启时重复。
答案 1 :(得分:0)
您可以将密码以加密形式存储在某处。从存储它的任何地方读取加密的密码,解密,将CURLOPT_KEYPASSWD
设置为解密的密码,使用curl访问远程复选框,然后取消设置CURLOPT_KEYPASSWD
仍然无法保护你免受真正坚决的入侵者的伤害,但这会让偶然的入侵者无法进行尝试。