Jak ustawić hasło roota w kontenerze dokera ze skryptu?

11

Mam skrypt, który działa na hoście i tworzy / uruchamia / zatrzymuje kontener dokera. Chciałbym, aby skrypt zmienił hasło użytkownika root w kontenerze.

Ponieważ kontener jest serwerem ssh, próbowałem: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

ale to nie działa. Zanim przejdę do przodu i poświęcę więcej czasu na debugowanie, chciałbym wiedzieć, czy jest na to mądrzejszy sposób.

Rozumiem, że właściwym „sposobem dokera” jest utworzenie skryptu uruchamianego przez plik Docker, który pobiera hasło ze wspólnego woluminu i ustawia je jako hasło roota. Brzmi skomplikowanie, ale wiem, jak to zrobić i działa dobrze w przypadku innego obrazu dokera, którego używam. Ale nie chcę tego robić w tym przypadku.

Potrzebuję tylko polecenia, które używa Dockera lub ssh do zmiany hasła użytkownika w sposób nieinteraktywny.

Chris
źródło

Odpowiedzi:

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

otworzy wyskakujące okienko z prośbą o hasło i zwróci je. W skrypcie nie ma hasła

Jeśli masz kontener dokerów, w którym musisz ustawić hasło, nie dbając o bezpieczeństwo, możesz dodać oświadczenie w pliku Docker:

RUN echo "root:root" | chpasswd
Ulf Samuelsson
źródło
Mam ten sam sposób, aby ustawić metodę podobną do twojej w dwóch moich Dockerfile (inny projekt, ale taki sam w istotnych częściach). Ale jedno działa (mogę ssh do tego) drugie nie pozwala mi. Masz pomysł, dlaczego?
ismailsunni
3
+1 Odpowiedź byłaby bardziej przejrzysta, gdyby wyjaśniała stdin dla chpasswd:echo username:newpassword | chpasswd
Jonathan Komar
5

To nie jest związane z Dockerem. Musisz wyraźnie powiedzieć, passwdże podasz hasło stdin.

echo 'newpassword' |passwd root --stdin
użytkownik1700494
źródło
Dzięki za wkład. --stdin nie jest jednak obsługiwany na Ubuntu. To nie działa
Chris
14
--stdinzostał amortyzowany na nowszych systemach Linux. chpasswdZamiast tego użyj :echo username:newpassword | chpasswd
nieczytelny
1

Działa to bezbłędnie na Ubuntu 14.04.4 LTS:

W skrypcie, który odbudowuje kontener (który powinien być uruchomiony na „hoście”), dodaj następujące linie:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd
Chris
źródło
Umieszczenie rzeczywistego hasła w skrypcie jest bardzo niepewnym sposobem obsługi haseł. O wiele bezpieczniej byłoby umieścić odpowiednio skryte hasło w skrypcie i używać go usermodzamiast passwd.
kasperd
Dobra uwaga, dzięki. W tym przypadku nie mam nic przeciwko ryzyku, ponieważ jest to tylko kontener dokujący, który robi bardzo niewiele rzeczy. Jeśli ktoś może odczytać skrypt, jest już właścicielem reszty serwera. Pamiętam o tym następnym razem :).
Chris