Suponha que eu estivesse usando sha1pass
para gerar um hash de alguma senha confidencial na linha de comando. Eu posso usar sha1pass mysecret
para gerar um hash, mysecret
mas isso tem a desvantagem que mysecret
está agora no histórico do bash. Existe uma maneira de atingir o objetivo final deste comando, evitando revelar mysecret
em texto simples, talvez usando um passwd
prompt de estilo?
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 no STDIN para algum comando.
Existe uma maneira de conseguir isso?
Edit : Esta questão atraiu muita atenção e houve várias boas respostas oferecidas abaixo. Um resumo é:
- De acordo com a resposta de @ Kusalananda , o ideal seria nunca dar uma senha ou segredo como argumento da linha de comando a um utilitário. Isso é vulnerável de várias maneiras, conforme descrito por ele, e deve-se usar um utilitário melhor projetado, capaz de receber informações secretas sobre o STDIN
- A resposta de @ vfbsilva descreve como impedir que 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 levar seus dados secretos para o STDIN. Como tal, decidi aceitar esta resposta.
sha1pass
no meu PO era apenas um exemplo, mas a discussão estabeleceu que existem melhores ferramentas que utilizam dados no STDIN. - como @R .. observa em sua resposta , o uso da expansão de comando em uma variável não é seguro.
Então, em resumo, aceitei a resposta do @ Jonathan, já que é a melhor solução, pois você tem um programa bem projetado e comportado para trabalhar. Embora passar uma senha ou segredo como argumento da linha de comando seja fundamentalmente inseguro, as outras respostas fornecem maneiras de atenuar os simples problemas de segurança.
sha1pass mysecret
está sendo executado e, portanto, saber o quemysecret
é. (Isso só funciona para os poucos segundos enquanto o programa está sendo executado, é claro ...)