
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 passwd
comando?
EDITAR
Lo sé por passwd < passwd_file.txt
contener 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 chpasswd
el 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 passwd
comando 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 useradd
comando? Linux típico useradd
tiene 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 sed
ni algo para cambiar la contraseña de root cifrada y salada.
Respuesta3
¡Sí! Encontré el camino. printf
me 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.