Como posso definir a senha root em um contêiner de docker a partir de um script?

11

Eu tenho um script que é executado no host e cria / inicia / para um contêiner de docker. Eu gostaria que o script alterasse a senha do usuário root dentro do contêiner.

Como o contêiner é um servidor ssh, tentei: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

mas não funciona. Antes de seguir em frente e gastar mais tempo depurando, gostaria de saber se existe uma maneira mais inteligente de fazer isso.

Entendo que a "maneira do docker" adequada é criar um script que seja executado pelo Dockerfile, que extrai a senha de um volume compartilhado e a define como a senha raiz. Isso parece complicado, mas eu sei como fazê-lo e funciona bem para outra imagem do docker que eu uso. Mas não quero fazer isso por este.

Eu só preciso de um comando que use o Docker ou o ssh para alterar a senha de um usuário de maneira não interativa.

Chris
fonte

Respostas:

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

irá abrir um pop-up, solicitando a senha e devolvê-la. Nenhuma senha armazenada no script

Se você possui um contêiner de docker em que precisa definir uma senha, sem se preocupar muito com segurança, adicione uma declaração no Dockerfile:

RUN echo "root:root" | chpasswd
Ulf Samuelsson
fonte
Eu tenho a mesma maneira de definir o método como o seu em dois dos meus Dockerfile (projeto diferente, mas o mesmo nas partes essenciais). Mas um está funcionando (eu posso ssh), o outro não me permite. Alguma idéia do porquê?
Ismailsunni
3
A resposta +1 seria mais transparente se explicasse stdin para chpasswd:echo username:newpassword | chpasswd
Jonathan Komar
5

Isso não está relacionado ao Docker. Você precisa dizer explicitamente passwdque fornecerá a senha de stdin.

echo 'newpassword' |passwd root --stdin
user1700494
fonte
Obrigado pela contribuição. --stdin não é suportado no ubuntu. Isso não funciona.
Chris
14
--stdinfoi depreciado em sistemas Linux mais recentes. Em chpasswdvez disso, use :echo username:newpassword | chpasswd
inevitável 21/02
1

Isso funciona perfeitamente no Ubuntu 14.04.4 LTS:

No script que reconstrói o contêiner (que deve estar em execução no "host"), adicione estas linhas:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd
Chris
fonte
Colocar a senha real em um script é uma maneira muito insegura de lidar com senhas. Seria muito mais seguro colocar uma senha com hash corretamente no script e usá-lo em usermodvez de passwd.
kasperd
Bom ponto, obrigado. Nesse caso, estou bem com o risco, pois esse é apenas um contêiner de docker que faz muito poucas coisas. Se alguém puder ler o script, ele já será o proprietário do restante do servidor. Mas eu vou ter isso em mente na próxima vez :).
Chris