Cambiar contraseña mediante programación

11

En la versión actual de Raspian, sé que es posible cambiar la contraseña del usuario conectado actualmente desde la línea de comandos de la siguiente manera:

sudo passwd

que luego solicitará al usuario que ingrese una nueva contraseña dos veces. Esto producirá resultados de esta manera:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Me preguntaba si hay una manera posible de cambiar una contraseña mediante programación, como desde un script de shell.

Estoy tratando de hacer un script de configuración para implementar en mi Raspberry Pis y no quiero tener que escribir manualmente nuevas contraseñas para ellos.

James Taylor
fuente
1
Para cambiar la contraseña del usuario actual no necesita prefijar sudo. Si lo usa sudo, puede forzar una nueva contraseña para cualquier usuario sin necesidad de conocer la contraseña actual de ese usuario.
roaima
expect(1)podría ayudar también
SailorCire
Asegúrese de considerar las implicaciones de seguridad cuando cambie las contraseñas mediante programación.
Josh Habdas

Respuestas:

18

Estás buscando el chpasswdcomando. Harías algo como esto:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

Tenga en cuenta que debe ejecutarse como root, al menos con la configuración PAM predeterminada. Pero presumiblemente ejecutar como root no es un problema para un script de implementación del sistema.

Además, puede hacer múltiples usuarios a la vez al alimentarlo con múltiples líneas de entrada.

derobert
fuente
9

Otra alternativa es usar el yescomando en su script.

yes newpassword | passwd youruser

Esto enviará newpasswordal passwdcomando para youruser.

Cabe mencionar que establecer / modificar las contraseñas de los usuarios a través de scripts puede presentar riesgos de seguridad y debe evitarse siempre que sea posible.

EDITAR:

Esta respuesta requiere acceso de root. Disculpas por no mencionar esto anteriormente. Es un método que uso cuando realizo tareas de administración que requieren acceso de root.

Timothy Martin
fuente
¿Has probado esto?
roaima
Si. He estado usando este método durante años. Lo probé antes de publicar mi respuesta y nuevamente ahora.
Timothy Martin
Incluso suponiendo que se passwdlea desde stdinun terminal (teclado) en lugar de hacerlo, ¿cómo puede funcionar esto cuando se le passwdsolicita primero la contraseña antigua de un usuario y luego la nueva?
roaima
@roaima posiblemente Timothy lo ejecuta como root (lo que explicaría por qué lo necesita youruseral final). Podría funcionar en algún lugar ...
derobert
1
@roaima El passwdcomando de las utilidades ocultas de Linux acepta entradas redirigidas (a diferencia de, por ejemplo, OpenSSH ssh). Sin yesembargo, el uso no es una buena idea: expone la contraseña a los intrusos que miran la lista de procesos en el momento equivocado. El uso echono tendría este defecto porque es un shell incorporado.
Gilles 'SO- deja de ser malvado'