Suponha que eu estivesse usando sha1pass
para gerar um hash de alguma senha confidencial na linha de comando. Posso usar sha1pass mysecret
para gerar um hash de mysecret
mas isso tem a desvantagem que mysecret
agora está no histórico do bash. Existe uma maneira de atingir o objetivo final deste comando, evitando a revelação mysecret
em texto simples, talvez usando um passwd
prompt -style?
Também estou interessado em uma maneira generalizada de fazer isso para passar dados confidenciais para qualquer comando. O método mudaria quando os dados confidenciais fossem passados como um argumento (como em sha1pass
) ou em STDIN para algum comando.
Existe uma maneira de conseguir isso?
Edit : Esta questão atraiu muita atenção e várias boas respostas foram oferecidas abaixo. Um resumo é:
- De acordo com a resposta de @Kusalananda , idealmente, nunca seria necessário fornecer uma senha ou segredo como argumento de linha de comando para um utilitário. Isso é vulnerável de várias maneiras, conforme descrito por ele, e deve-se usar um utilitário melhor projetado que seja capaz de receber a entrada secreta no STDIN
- A resposta de @vfbsilva descreve como impedir que as coisas sejam armazenadas no histórico do bash
- A resposta de @Jonathan descreve um método perfeitamente bom para fazer isso, desde que o programa possa obter seus dados secretos no STDIN. Como tal, decidi aceitar esta resposta.
sha1pass
no meu OP foi apenas um exemplo, mas a discussão estabeleceu que existem ferramentas melhores que coletam dados no STDIN. - como @R.. observa em sua resposta , o uso de expansão de comando em uma variável não é seguro.
Portanto, em resumo, aceitei a resposta de @Jonathan, pois é a melhor solução, pois você tem um programa bem projetado e bem-comportado para trabalhar. Embora passar uma senha ou segredo como um argumento de linha de comando seja fundamentalmente inseguro, as outras respostas fornecem maneiras de mitigar as preocupações simples de segurança.