Cambiar contraseña en modo sin cabeza

Cambiar contraseña en modo sin cabeza

Estoy creando un script para automatizar completamente la configuración de un VPS y necesito cambiar la contraseña de root. Me gustaría evitar escribirlo ya que el script se ejecuta a través de SSH.

¿Hay alguna manera de redirigir un valor arbitrario a la entrada del passwdcomando?

EDITAR

Lo sé por passwd < passwd_file.txtcontener la contraseña dos veces... Me gustaría saber si hay una manera más elegante ya que parece un poco torpe usar un archivo temporal para este propósito.

Respuesta1

No dices qué versión de UNIX estás usando, pero en Linux la página del manual passwd(1) muestra:

   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.

Entonces todo lo que tienes que hacer es ejecutar:

echo 'somepassword' | passwd --stdin

Editar para agregar: más portátil es chpasswdel que existe (al menos) tanto en Red Hat como en Ubuntu:

echo 'someuser:somepassword' | chpasswd

Vea la página de manual.

Respuesta2

Creo que te resultará difícil hacer lo que quieres. El passwdcomando hace todo lo posible para evitar la situación que usted describe, a fin de obstaculizar cualquier esquema de adivinación de contraseñas y evitar muchos problemas potenciales de seguridad.

¿Puedes usar el useraddcomando? Linux típico useraddtiene una opción "-p" o "--password" que le permite configurar elcifradocontraseña a algún valor. Puede obtener esa contraseña cifrada del archivo /etc/shadow.

La otra opción es jugar con el archivo /etc/shadow. No debería ser demasiado difícil de usar sedni algo para cambiar la contraseña de root cifrada y salada.

Respuesta3

¡Sí! Encontré el camino. printfme salvó:

HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORD\n$ROOT_PASSWORD\n" | passwd
EOF

Para mí, esa es la mejor salida: limpia y perfectamente segura, ya que la contraseña nunca llega al host remoto local inferior de forma clara (solo a través de una conexión ssh).

Respuesta4

Podrías envolver tmux alrededor de passwd:

tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'\n'
tmux send-keys -t chpwd NEWPASSWORD$'\n'

Ejecute como root, por supuesto.

información relacionada