J'ai un script qui s'exécute sur l'hôte et crée/démarre/arrête un conteneur Docker. J'aimerais que le script change le mot de passe de l'utilisateur root dans le conteneur.
Puisque le conteneur est un serveur ssh, j'ai essayé: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'
mais ça ne marche pas. Avant d'aller plus loin et de passer plus de temps à le déboguer, j'aimerais savoir s'il existe une façon plus intelligente de le faire.
Je comprends que la bonne "manière de docker" consiste à créer un script exécuté par le Dockerfile, qui extrait le mot de passe d'un volume partagé et le définit comme mot de passe root. Cela semble compliqué, mais je sais comment le faire et fonctionne bien pour une autre image de docker que j'utilise. Mais je ne veux pas le faire pour celui-ci.
J'ai juste besoin d'une commande qui utilise Docker ou ssh pour modifier le mot de passe d'un utilisateur de manière non interactive.
Cela fonctionne parfaitement sur Ubuntu 14.04.4 LTS:
Dans le script qui reconstruit le conteneur (qui devrait être exécuté sur "l'hôte"), ajoutez ces lignes:
$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | Sudo docker exec -i <container-id-or-name> passwd
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)
ouvrira une fenêtre contextuelle, demandant un mot de passe, et le retournera. Aucun mot de passe stocké dans le script
Si vous avez un conteneur Docker où vous devez définir un mot de passe, sans trop vous soucier de la sécurité, vous pouvez ajouter une instruction dans le Dockerfile:
RUN echo "root:root" | chpasswd
Ce n'est pas lié à Docker. Vous devez explicitement dire passwd
que vous allez fournir un mot de passe à partir de stdin
.
echo 'newpassword' |passwd root --stdin