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"

하지만 이것이 나쁜 생각일까요? 의 제작자가 vaultSTDIN에서 비밀번호를 허용하지 않는 이유가 분명 있기는 하지만 이것이 비밀번호를 전달하는 가장 안전한 방법인 것 같습니다. 그래서 저는 제가 안전하지 않은 일을 하고 있지 않은지 확인하고 싶었습니다.

관련 정보