Supposons que j'utilisais sha1pass
pour générer un hachage d'un mot de passe sensible sur la ligne de commande. Je peux utiliser sha1pass mysecret
pour générer un hachage de mysecret
mais cela a l'inconvénient qui mysecret
est maintenant dans l'histoire bash. Existe-t-il un moyen d’atteindre l’objectif final de cette commande tout en évitant de révéler mysecret
le texte brut, peut-être en utilisant une passwd
invite -style?
Je suis également intéressé par un moyen généralisé de faire cela pour transmettre des données sensibles à n'importe quelle commande. La méthode changerait lorsque les données sensibles seraient transmises sous forme d'argument (comme dans sha1pass
) ou sur STDIN à une commande.
Y a-t-il un moyen d'accomplir cela?
Edit : Cette question a attiré beaucoup d'attention et plusieurs bonnes réponses ont été proposées ci-dessous. Un résumé est:
- Selon la réponse de @ Kusalananda , idéalement, il ne serait jamais nécessaire de donner un mot de passe ou un secret en tant qu'argument de ligne de commande à un utilitaire. Ceci est vulnérable de plusieurs manières, comme décrit par lui, et on devrait utiliser un utilitaire mieux conçu capable de prendre l'entrée secrète sur STDIN.
- La réponse de @ vfbsilva explique comment éviter que des éléments ne soient stockés dans l'historique bash
- La réponse de @ Jonathan décrit une méthode parfaitement efficace pour accomplir cela tant que le programme peut prendre ses données secrètes sur STDIN. En tant que tel, j'ai décidé d'accepter cette réponse.
sha1pass
dans mon OP était juste un exemple, mais la discussion a établi qu'il existe de meilleurs outils qui prennent des données sur STDIN. - comme le note @R .. dans sa réponse , l'utilisation de l'extension de commande sur une variable n'est pas sans danger.
En résumé, j’ai accepté la réponse de @ Jonathan car c’est la meilleure solution étant donné que vous disposez d’un programme bien conçu et bien conçu. Bien que le fait de passer un mot de passe ou un secret en tant qu'argument de ligne de commande soit fondamentalement dangereux, les autres réponses permettent d'atténuer les simples problèmes de sécurité.
sha1pass mysecret
est en cours d'exécution et donc savoir ce qu'il enmysecret
est. (Cela ne fonctionne que pendant quelques secondes lorsque le programme est en cours d'exécution, bien sûr ...)