У меня есть сценарий, который запускается на хосте и создает / запускает / останавливает контейнер докеров. Я хочу, чтобы сценарий изменил пароль пользователя root в контейнере.
Поскольку контейнер является ssh-сервером, я попробовал: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'
но это не работает. Прежде чем продолжить и тратить больше времени на отладку, я хотел бы знать, есть ли более разумный способ сделать это.
Я понимаю, что правильным «способом докера» является создание сценария, запускаемого Dockerfile, который извлекает пароль из общего тома и устанавливает его в качестве пароля root. Это звучит сложно, но я знаю, как это сделать, и хорошо работает для другого образа докера, который я использую. Но я не хочу этого делать ради этого.
Мне просто нужна команда, которая использует Docker или ssh для неинтерактивного изменения пароля пользователя.
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)
откроет всплывающее окно с запросом пароля и вернет его. Пароль не хранится в скрипте
Если у вас есть докер-контейнер, где вам нужно установить пароль, не заботясь о безопасности, вы можете добавить оператор в Dockerfile:
RUN echo "root:root" | chpasswd
Это не связано с Docker. Вам нужно прямо сказать passwd
что вы собираетесь предоставить пароль от stdin
.
echo 'newpassword' |passwd root --stdin
Это безупречно работает в Ubuntu 14.04.4 LTS:
В скрипте, который перестраивает контейнер (который должен работать на «хосте»), добавьте следующие строки:
$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd