Come posso impostare la password di root in un contenitore finestra mobile da uno script?


11

Ho uno script che viene eseguito sull'host e crea / avvia / arresta un contenitore finestra mobile. Vorrei che lo script cambiasse la password dell'utente root all'interno del contenitore.

Poiché il contenitore è un server SSH, ho provato: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

ma non funziona. Prima di andare avanti e dedicare più tempo al debug, vorrei sapere se esiste un modo più intelligente per farlo.

Comprendo che il "modo docker" corretto è creare uno script che viene eseguito dal Dockerfile, che estrae la password da un volume condiviso e la imposta come password di root. Sembra complicato, ma so come farlo e funziona bene con un'altra immagine docker che utilizzo. Ma non voglio farlo per questo.

Ho solo bisogno di un comando che utilizza Docker o ssh per modificare la password di un utente in modo non interattivo.

Risposte:


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

aprirà un popup, chiedendo la password e la restituirà. Nessuna password memorizzata nello script

Se si dispone di un contenitore docker in cui è necessario impostare una password, senza preoccuparsi troppo della sicurezza, è possibile aggiungere un'istruzione nel file Docker:

RUN echo "root:root" | chpasswd

Ho lo stesso modo di impostare il metodo come il tuo in due dei miei Dockerfile (progetto diverso, ma lo stesso nelle parti essenziali). Ma uno sta funzionando (posso dirlo) l'altro non me lo permette. Qualche idea sul perché?
Ismailsunni,

3
+1 La risposta sarebbe più trasparente se spiegasse stdin per chpasswd:echo username:newpassword | chpasswd
Jonathan Komar il

5

Questo non è correlato a Docker. Devi dire esplicitamente passwdche hai intenzione di fornire la password da stdin.

echo 'newpassword' |passwd root --stdin

Grazie per l'input. --stdin non è supportato su Ubuntu però. Non funziona
Chris,

14
--stdinè stato ammortizzato nei sistemi Linux più recenti. Utilizzare chpasswdinvece:echo username:newpassword | chpasswd
insostituibile il

1

Funziona perfettamente su Ubuntu 14.04.4 LTS:

Nello script che ricostruisce il contenitore (che dovrebbe essere in esecuzione sull'host), aggiungi queste righe:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd

Inserire la password effettiva in uno script è un modo molto insicuro per gestire le password. Sarebbe molto più sicuro inserire una password con hash corretto nello script e utilizzarla usermodanziché passwd.
Kasperd,

Buon punto, grazie. In questo caso sono d'accordo con il rischio, in quanto si tratta solo di un contenitore docker che fa pochissime cose. Se qualcuno può leggere lo script, possiede già il resto del server. Lo terrò a mente per la prossima volta però :).
Chris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.