![使用ssh私钥登录自动解密加密文件系统,无需密码提示](https://linux22.com/image/816768/%E4%BD%BF%E7%94%A8ssh%E7%A7%81%E9%92%A5%E7%99%BB%E5%BD%95%E8%87%AA%E5%8A%A8%E8%A7%A3%E5%AF%86%E5%8A%A0%E5%AF%86%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%8C%E6%97%A0%E9%9C%80%E5%AF%86%E7%A0%81%E6%8F%90%E7%A4%BA.png)
引用之前的一个帖子:
“好的,虽然可以使用 SSH 公钥身份验证登录系统而无需输入密码(即使您的主目录已加密),但无法自动挂载您的加密主目录。”
这就是问题所在。虽然我知道密码是用来解锁密码的,但这意味着即使你设置了自动登录,你也需要密码,所以你不需要密码。更好的解决方案是使用私钥的远程身份验证来解锁解密密码的第二个副本,然后根据该解锁允许文件系统解密。这样,我不需要密码,只有当授权和(公钥)认证的用户登录时,才能读取文件。
“为了解决这个问题,您需要在未挂载的 $HOME/.profile 末尾添加一行:
ecryptfs-mount-private 这将确保在您使用 SSH 公钥身份验证登录后,系统将提示您输入密码并挂载您的加密数据。 如果已挂载,则此命令应会默默成功。"
除了需要输入密码之外。如果 ssh 成功,您应该可以访问解密的文件系统。所以我的问题是,有没有办法解决这个问题?或者,如果没有,负责该特定机制的人可以修复它以使其以这种方式工作吗?
答案1
如果不扩展 SSH 协议或实现其他自定义协议,这是不可能的。
首先,SSH 私钥永远不会提供给您登录的系统。相反,您的系统会使用私钥签署质询,并将签署的质询发送回远程系统。由于远程系统记录了公钥,因此它可以验证签名并确信您持有私钥。
如果您使用 SSH 代理,则可以通过转发代理连接为远程主机提供对您的私钥的有限访问权限(此行为存在一定风险:如果远程主机已被攻陷,他们可能会使用转发的代理连接侵入您有权访问的其他系统)。但同样,这无济于事,因为 SSH 代理不会泄露私钥,而是提供一个接口来签署客户端提供的数据。
废弃的安全外壳身份验证代理协议互联网草案允许客户端要求代理解密某些提供的数据,但该协议的 OpenSSH 或 Gnome Keyring 实现均未实现该功能。即使实现了,这也将涉及远程系统向远程系统透露 eCryptFS 密码,而远程系统有其自身的安全考虑。
正如您所见,这不是一个特别简单的问题,而且很难用螺栓固定在现有公用设施的侧面。
如果您乐意将远程系统的密码存储在本地,那么您可能能够编写一个脚本来解密它并将其传输到ssh remotehost ecryptfs-add-passphrase -
或类似位置,然后允许加密目录挂载。