스크립트를 사용하여 도커 컨테이너의 루트 비밀번호를 설정하는 방법


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 중 두 가지 (다른 프로젝트이지만 필수 부분에서는 동일)에서 메소드를 설정하는 것과 동일한 방법이 있습니다. 그러나 하나는 일하고 있는데 (나는 그것을 ssh 할 수있다) 다른 하나는 나를 허용하지 않는다. 왜 그런지 알아?
ismailsunni

3
+1 chpasswd에 대해 stdin을 설명하면 답변이 더 투명 해집니다.echo username:newpassword | chpasswd
Jonathan Komar

5

Docker와 관련이 없습니다. 의 passwd비밀번호를 제공 하겠다고 명시 적으로 말해야 합니다 stdin.

echo 'newpassword' |passwd root --stdin

입력 주셔서 감사합니다. --stdin은 우분투에서 지원되지 않습니다. 작동하지 않습니다.
Chris

14
--stdin최신 Linux 시스템에서는 감가 상각되었습니다. 사용 chpasswd하는 대신 :echo username:newpassword | chpasswd
unblevable

1

이것은 Ubuntu 14.04.4 LTS에서 완벽하게 작동합니다.

컨테이너를 다시 빌드하는 스크립트 ( "host"에서 실행 중)에서 다음 행을 추가하십시오.

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

실제 비밀번호를 스크립트에 입력하는 것은 비밀번호를 처리하는 매우 안전하지 않은 방법입니다. 스크립트에 올바로 해시 된 비밀번호를 넣고 usermod대신에 사용하는 것이 훨씬 더 안전합니다 passwd.
kasperd 2016 년

좋은 지적입니다. 감사합니다. 이 경우 매우 적은 일을하는 도커 컨테이너이므로 위험에 동의합니다. 누군가가 스크립트를 읽을 수 있다면 이미 나머지 서버를 소유하고 있습니다. 그래도 다음에 염두에 두겠습니다 :).
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.