为什么不允许从 STDIN 读取密码,但不能从 PTY 或参数读取密码?

为什么不允许从 STDIN 读取密码,但不能从 PTY 或参数读取密码?

我有一个程序接收秘密密码。我可以选择在终端上手动输入它或将其作为命令行参数提供。这使得很难以安全的方式实现自动化:通常运行脚本时没有终端,并且我不想在命令行上传递密码,因为它可以通过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 上的密码的原因,并且我想确保我没有做一些不安全的事情。

相关内容