假设我sha1pass
用来在命令行上生成一些敏感密码的哈希值。我可以用它sha1pass mysecret
来生成一个哈希值,mysecret
但这具有mysecret
现在 bash 历史中的缺点。有没有办法完成这个命令的最终目标,同时避免mysecret
以纯文本形式显示,也许是通过使用passwd
-style 提示?
我也对将敏感数据传递给任何命令的通用方法感兴趣。当敏感数据作为参数(例如 in sha1pass
)或在 STDIN 上传递给某个命令时,该方法会发生变化。
有没有办法做到这一点?
编辑:这个问题引起了很多关注,下面提供了几个很好的答案。总结如下:
- 根据@Kusalananda 的回答,理想情况下,人们永远不必将密码或秘密作为命令行参数提供给实用程序。正如他所描述的,这在几个方面很容易受到攻击,应该使用设计更好的实用程序,该实用程序能够在 STDIN 上获取秘密输入
- @vfbsilva 的回答描述了如何防止将事物存储在 bash 历史记录中
- @Jonathan 的回答描述了一种非常好的方法来实现这一点,只要程序可以在 STDIN 上获取其秘密数据。因此,我决定接受这个答案。
sha1pass
在我的 OP 中只是一个例子,但讨论已经确定存在更好的工具来获取 STDIN 上的数据。 - 正如@R..在他的回答中指出的那样,对变量使用命令扩展是不安全的。
因此,总而言之,我接受了@Jonathan 的回答,因为它是最好的解决方案,因为您有一个设计良好且行为良好的程序可供使用。尽管将密码或机密作为命令行参数传递从根本上说是不安全的,但其他答案提供了减轻简单安全问题的方法。