Як я можу встановити корінний пароль у контейнері docker із сценарію?


11

У мене є сценарій, який працює на хості і створює / запускає / зупиняє контейнер докера. Я хотів би, щоб сценарій змінив пароль кореневого користувача в контейнері.

Оскільки контейнер - це ssh-сервер, я спробував: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

але це не працює. Перш ніж йти вперед і витрачати більше часу на його налагодження, я хотів би знати, чи є розумніший спосіб це зробити.

Я розумію, що належним "докерським способом" є створення скрипту, керованого Dockerfile, який витягує пароль із спільного тома і встановлює його як основний пароль. Це звучить складно, але я знаю, як це зробити і добре працює для іншого зображення докера, який я використовую. Але я не хочу цього робити для цього.

Мені просто потрібна команда, яка використовує Docker або ssh для зміни пароля користувача неінтерактивно.

Відповіді:


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

відкриє спливаюче вікно, запитаючи пароль, і поверне його. У скрипті не зберігається пароль

Якщо у вас є контейнер докера, де вам потрібно встановити пароль, не піклуючись про безпеку, ви можете додати заяву в Dockerfile:

RUN echo "root:root" | chpasswd

У мене такий же спосіб встановити метод, як ваш, у двох моїх Dockerfile (різний проект, але однаковий у важливих частинах). Але одна працює (я можу на неї збитися) інша не дозволяє мені. Будь-яка ідея чому?
ismailsunni

3
+1 Відповідь була б більш прозорою, якби вона пояснила stdin для chpasswd:echo username:newpassword | chpasswd
Джонатан Комар,

5

Це не пов’язано з Докером. Вам потрібно прямо сказати, passwdщо ви збираєтесь надати пароль від stdin.

echo 'newpassword' |passwd root --stdin

Дякуємо за вклад. --stdin не підтримується на ubuntu. Це не працює.
Кріс

14
--stdinамортизовано на новіших системах Linux. Використовуйте chpasswdзамість цього:echo username:newpassword | chpasswd
unblevable

1

Це працює бездоганно на Ubuntu 14.04.4 LTS:

У сценарій, який відновлює контейнер (який повинен працювати на "хості"), додайте ці рядки:

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

Введення фактичного пароля в сценарій - це дуже небезпечний спосіб обробки паролів. Було б набагато безпечніше правильно поставити хешований пароль у сценарій та використовувати, usermodа не використовувати passwd.
kasperd

Хороший момент, дякую. У цьому випадку я добре з ризиком, оскільки це просто докер-контейнер, який робить дуже мало речей. Якщо хтось може прочитати сценарій, він вже володіє рештою сервера. Я буду мати це на увазі наступного разу :).
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.