我有一个程序接收秘密密码。我可以选择在终端上手动输入它或将其作为命令行参数提供。这使得很难以安全的方式实现自动化:通常运行脚本时没有终端,并且我不想在命令行上传递密码,因为它可以通过ps
等方式读取。
例如(在终端上):
$ vault operator unseal
Unseal Key (will be hidden):
(有用)
$ vault operator unseal <<<"$PASSPHRASE"
Unseal Key (will be hidden):
An error occurred attempting to ask for an unseal key. The raw error message
is shown below, but usually this is because you attempted to pipe a value
into the unseal command or you are executing outside of a terminal (tty). You
should run the unseal command from a terminal for maximum security. If this
is not an option, the unseal key can be provided as the first argument to the
unseal command. The raw error was: file descriptor 0 is not a terminal
(这是行不通的)
我已经成功克服了这个问题
socat STDIO 'EXEC:vault operator unseal,PTY' <<<"$PASSPHRASE"
但这是一个坏主意吗?这似乎是传递密码的最安全的方式,尽管 的创建者肯定vault
有他们不接受 STDIN 上的密码的原因,并且我想确保我没有做一些不安全的事情。