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