Estou procurando a (1) maneira mais segura e (2) mais simples de fazer com que um usuário digite uma senha em um prompt do shell bash e fazer com que essa senha se torne parte do stdin em um programa.
É assim que o stdin precisa se parecer:, {"username":"myname","password":"<my-password>"}
onde <my-password>
está o que foi digitado no prompt do shell. Se eu tivesse controle sobre o programa stdin, poderia modificá-lo para solicitar com segurança uma senha e colocá-la no lugar, mas o downstream é um comando padrão de uso geral.
Eu considerei e rejeitei abordagens que usam o seguinte:
- o usuário digitando a senha na linha de comando: a senha seria mostrada na tela e também visível a todos os usuários via "ps"
- interpolação de variável de shell em um argumento para um programa externo (por exemplo,
...$PASSWORD...
): a senha ainda estaria visível a todos os usuários via "ps" - variáveis de ambiente (se forem deixadas no ambiente): a senha seria visível para todos os processos filhos; mesmo processos confiáveis podem expor a senha se despejarem variáveis de ambiente principais ou de despejo como parte de um diagnóstico
- a senha em um arquivo por um longo período de tempo, mesmo um arquivo com permissões restritas: o usuário pode expor acidentalmente a senha e o usuário root pode vê-la acidentalmente
Colocarei minha solução atual como resposta abaixo, mas selecionarei com satisfação uma resposta melhor se alguém tiver uma. Eu estou pensando que deveria haver algo mais simples ou talvez alguém veja uma preocupação de segurança que eu perdi.