El comando passwd es la forma de modificar la contraseña de un usuario en Linux, y requiere de la entrada por teclado de la nueva contraseña de forma interactiva (stdin).
--stdin
This option is used to indicate that passwd should read the new
password from standard input, which can be a pipe.
Pero existe una forma de utilizar el comando passwd de forma no interactiva y con una sola línea de comando para cambiar la contraseña de usuarios en Linux, es decir, sin tener que introducir la contraseña dos veces de forma manual cuando el menú interactivo la pida. Esto es especialmente útil en el caso de tener que crear varias cuentas de usuario.
En este artículo:
Veamos un ejemplo sobre cómo cambiar la contraseña de usuario con una línea de terminal en Linux.
Para cambiar la contraseña de un usuario en una sola línea de terminal utilizaremos el comando echo, una tubería y el comando passwd con la opción stdin.
echo "mipassword" | passwd --stdin usuario1
Por defecto, el comando echo no interpreta los caracteres escapados. Así que vamos a utilizar la opción echo -e, que sí que interpreta los caracteres escapados, y vamos a ver cómo utilizarlo para cambiar la contraseña en modo interactivo, pero usando una sola línea de comando en la terminal (y sin usar la opción stdin del comando passwd).
ECHO(1) User Commands ECHO(1)
NAME
echo - display a line of text
SYNOPSIS
echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION
DESCRIPTION
-e enable interpretation of backslash escapes
[root@localhost ~]# echo -e "mipassnueva\nmipassnueva" | passwd usuario1
Cambiando la contraseña del usuario usuario1.
Nueva contraseña: Vuelva a escribir la nueva contraseña: passwd: todos los tokens de autenticación se actualizaron exitosamente.
Vemos que usamos el comando echo con la opción para interpretar caracteres escapados, y le pasamos directamente la contraseña, un salto de línea y de nuevo la contraseña; después usamos la tubería (pipe) y el comando passwd.
De nuevo gracias al comando echo y la opción -e, podremos cambiar la contraseña de un usuario en una máquina remota, pasando a través de ssh la línea de comando usando echo :
[root@localhost ~]# ssh 192.168.8.125 \ 'echo -e "nuevopass\nnuevopass" | passwd usuario2'
root@192.168.8.125's password:
Nueva contraseña: Vuelva a escribir la nueva contraseña: Cambiando la contraseña del usuario usuario2.
passwd: todos los símbolos de autenticación se actualizaron con éxito.
Y con estos métodos que hemos visto, podremos cambiar la contraseña de usuarios en Linux usando la opción stdin del comando passwd. Muy útil en el caso de tener que realizar el cambio para muchos usuarios de una vez.