¿Es posible pasar contraseñas en un script de shell?

11

Durante mucho tiempo que estoy buscando esto, me gustaría saber si es posible pasar contraseñas en un script de shell. Muchas de las respuestas regresaron con no. Recientemente leí un artículo que decía que cómo pasar contraseñas en un script de shell. He intentado eso, pero no parece funcionar. Este es el enlace . ¿Alguien puede pagar y volver atrás? También por favor dígame ¿hay alguna forma de pasar contraseñas en un script de shell? Si no, por favor dígame ¿cómo obtiene Linux la entrada para la contraseña?

karthick87
fuente

Respuestas:

12

Al "ingresar contraseñas", probablemente se refiera a ingresar datos sin ser visibles para el usuario.

(sugerido por geirha) Al usar bash, puede usar la -sopción para evitar que se muestren los caracteres escritos:

read -p "Password please: " -s pass

Alternativamente, cambie el comportamiento del terminal para ocultar los caracteres escritos con stty -echo(deshabilitar echo). Después de leer la contraseña con el shell incorporado en readuna variable (en el ejemplo a continuación $pass), vuelva a activarla stty echo. Debido a que la nueva línea desde Enterestá oculta hasta, debe imprimir una nueva línea para obtener resultados futuros en una nueva línea.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

ready printfson elementos integrados de shell. sttyes proporcionado por el coreutilspaquete que se instala por defecto. Eso significa que este fragmento es muy portátil.

Nota: la -popción no es estándar, sino de bash. Si necesita mostrar un aviso en otros shells, use:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Referencias

Lekensteyn
fuente
Solo quiero dar la contraseña de root del sistema remoto en el script. ¿Es posible en tu caso?
karthick87
@ karthick87: no, este script solo captura los datos que el usuario escribe de forma interactiva. Si desea poner contraseñas raíz en scripts, ¿por qué no considera los inicios de sesión basados ​​en claves?
Lekensteyn
1
La lectura de Bash también tiene una opción para desactivar el eco mientras lee en la línea. Ver help '\read'.
geirha 05 de
En zshella se puede lograr read -s 'pw?Prompt text', donde pwes una variable donde se colocará la contraseña y -ses una bandera para ocultar la entrada.
calvas
2

¿A qué programa quieres pasar una contraseña?

El guión en el enlace funciona para mí. Tenga en cuenta que no es un script de shell sino un script de espera (necesita expectque se instale el paquete`). El uso de esperar es una forma común de automatizar programas interactivos basados ​​en texto.

Los sshinicios de sesión no interactivos a menudo se realizan mediante autenticación basada en clave con una frase de contraseña vacía.

Algunos otros programas (como sudo) tienen opciones para leer una contraseña de stdin.

Proporcionar una contraseña como opción de línea de comando es a menudo un problema de seguridad, ya que en la mayoría de los sistemas cualquier usuario puede ver los procesos de cualquier otro usuario, incluidos los argumentos de la línea de comando que utilizan herramientas simples como ps.

Florian Diesch
fuente
Solo quiero pasar una contraseña al programa ssh.
karthick87
Entonces, tal vez la autenticación de clave funcione para usted: úsela ssh-keygenpara crear una clave de autenticación (solo presione Entrar cuando se le solicite una frase de paso) y cópiela al usuario remoto usando ssh-copy-id. Si la autenticación de clave está habilitada para sshd (es por defecto) ssh entonces No te pido una contraseña.
Florian Diesch
1

Un script nunca debería realmente manejar contraseñas. Si la aplicación necesita la contraseña, solicítela o, si eso no es posible, encuentre una mejor manera de autenticarse con la aplicación. Por favor, lea http://mywiki.wooledge.org/BashFAQ/069

geirha
fuente
0

Hay una manera de almacenar contraseñas en un script bash, pero debe cifrar el script para que nadie pueda leerlo o ejecutar ningún tipo de depurador para ver exactamente lo que está haciendo. Para cifrar un script bash / shell y hacer que sea realmente ejecutable, intente copiarlo y pegarlo aquí

En la página anterior, todo lo que tiene que hacer es enviar su script (puede enviar primero un script de muestra para su tranquilidad). Se generará un archivo zip para usted. Haga clic derecho en el enlace de descarga y copie la URL que se le proporcionó. Luego, vaya a su cuadro UNIX y realice los siguientes pasos.

Instalación:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Lo que el comando de instalación anterior hará por usted es:

  1. Instalará el script encriptado en el directorio /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Colocará un enlace a este script encriptado en el directorio que especifique en reemplazo de /home/(your-username)esa manera, le permite acceder fácilmente al script sin tener que escribir la ruta absoluta.

  3. Garantiza que NADIE pueda modificar el script: cualquier intento de modificar el script cifrado lo dejará inoperativo ... hasta que esos intentos se detengan o eliminen.

  4. Asegura absolutamente NADIE puede hacer copias de la misma. Nadie puede copiar su secuencia de comandos en una ubicación aislada e intentar jugar con ella para ver cómo funciona. Todas las copias del script deben ser enlaces a la ubicación original que especificó durante la instalación.

NOTA:

No creo que esto funcione para scripts interactivos que soliciten al usuario una respuesta. Los valores deben estar codificados en el script. El cifrado garantiza que nadie pueda ver esos valores, por lo que no debe preocuparse por eso.

Trabajos Simplificados
fuente
-1

simplemente puedes hacer algo como esto.

# echo -e "password_here\npassword_here" | su user

fuente

fromnaboo
fuente