¿Cómo puedo configurar la contraseña de root en un contenedor acoplable desde un script?

11

Tengo un script que se ejecuta en el host y crea / inicia / detiene un contenedor acoplable. Me gustaría que el script cambie la contraseña del usuario raíz dentro del contenedor.

Como el contenedor es un servidor ssh, probé: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

Pero no funciona. Antes de seguir adelante y pasar más tiempo depurándolo, me gustaría saber si hay una manera más inteligente de hacerlo.

Entiendo que la "manera de docker" adecuada es crear un script ejecutado por el Dockerfile, que extrae la contraseña de un volumen compartido y la establece como la contraseña de root. Esto suena complicado, pero sé cómo hacerlo y funciona bien para otra imagen de acoplador que uso. Pero no quiero hacerlo por este.

Solo necesito un comando que use Docker o ssh para cambiar la contraseña de un usuario de manera no interactiva.

Chris
fuente

Respuestas:

8
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)

abrirá una ventana emergente, solicitando una contraseña, y la devolverá. No hay contraseña almacenada en el script

Si tiene un contenedor Docker donde necesita establecer una contraseña, sin preocuparse demasiado por la seguridad, puede agregar una declaración en el Dockerfile:

RUN echo "root:root" | chpasswd
Ulf Samuelsson
fuente
Tengo la misma manera de configurar el método como el suyo en dos de mi Dockerfile (proyecto diferente, pero igual en las partes esenciales). Pero uno está funcionando (puedo hacerlo), el otro no me lo permite. ¿Alguna idea de por qué?
ismailsunni
3
+1 La respuesta sería más transparente si explicara stdin para chpasswd:echo username:newpassword | chpasswd
Jonathan Komar
5

Esto no está relacionado con Docker. Debe decir explícitamente passwdque va a proporcionar una contraseña stdin.

echo 'newpassword' |passwd root --stdin
usuario1700494
fuente
Gracias por el aporte. --stdin no es compatible con ubuntu sin embargo. No funciona
Chris
14
--stdinse ha depreciado en los sistemas Linux más nuevos. Utilice en su chpasswdlugar:echo username:newpassword | chpasswd
imposible de construir
1

Esto funciona perfectamente en Ubuntu 14.04.4 LTS:

En el script que reconstruye el contenedor (que debería ejecutarse en el "host"), agregue estas líneas:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd
Chris
fuente
Poner la contraseña real en un script es una forma muy insegura de manejar contraseñas. Sería mucho más seguro para poner una contraseña adecuada hash en el guión y utilizar usermoden lugar de passwd.
kasperd
Buen punto, gracias. En este caso, estoy de acuerdo con el riesgo, ya que este es solo un contenedor acoplable que hace muy pocas cosas. Si alguien puede leer el script, ya posee el resto del servidor. Aunque lo tendré en cuenta para la próxima vez :).
Chris