Supongamos que estaba usando sha1pass
para generar un hash de alguna contraseña sensible en la línea de comando. Puedo usar sha1pass mysecret
para generar un hash de mysecret
pero esto tiene la desventaja que mysecret
ahora está en el historial de bash. ¿Hay alguna manera de lograr el objetivo final de este comando mientras se evita revelar mysecret
en texto plano, tal vez utilizando un passwd
indicador de estilo?
También estoy interesado en una forma generalizada de hacer esto para pasar datos confidenciales a cualquier comando. El método cambiaría cuando los datos confidenciales se pasan como un argumento (como en sha1pass
) o en STDIN a algún comando.
¿Hay alguna manera de lograr esto?
Editar : Esta pregunta atrajo mucha atención y se han ofrecido varias buenas respuestas a continuación. Un resumen es:
- Según la respuesta de @ Kusalananda , idealmente uno nunca tendría que dar una contraseña o secreto como argumento de línea de comandos a una utilidad. Esto es vulnerable de varias maneras según lo descrito por él, y uno debería usar una utilidad mejor diseñada que sea capaz de tomar la entrada secreta en STDIN
- La respuesta de @ vfbsilva describe cómo evitar que las cosas se almacenen en el historial de bash
- La respuesta de @ Jonathan describe un método perfectamente bueno para lograr esto siempre que el programa pueda tomar sus datos secretos en STDIN. Como tal, he decidido aceptar esta respuesta.
sha1pass
en mi OP fue solo un ejemplo, pero la discusión ha establecido que existen mejores herramientas que toman datos sobre STDIN. - Como @R .. señala en su respuesta , el uso de la expansión de comandos en una variable no es seguro.
En resumen, acepté la respuesta de @ Jonathan ya que es la mejor solución dado que tiene un programa bien diseñado y con buen comportamiento para trabajar. Aunque pasar una contraseña o un secreto como argumento de la línea de comandos es fundamentalmente inseguro, las otras respuestas proporcionan formas de mitigar las preocupaciones simples de seguridad.
sha1pass mysecret
está ejecutando y, por lo tanto, saber quémysecret
es. (Esto solo funciona durante unos segundos mientras el programa se está ejecutando, por supuesto ...)