ฉันจะตั้งรหัสผ่านรูทในคอนเทนเนอร์นักเทียบท่าจากสคริปต์ได้อย่างไร


11

ฉันมีสคริปต์ที่ทำงานบนโฮสต์และสร้าง / start / stop container docker ฉันต้องการให้สคริปต์เปลี่ยนรหัสผ่านของผู้ใช้รูทภายในคอนเทนเนอร์

เนื่องจาก container เป็นเซิร์ฟเวอร์ 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
Jonathan Komar

5

สิ่งนี้ไม่เกี่ยวข้องกับ Docker คุณจำเป็นต้องชัดเจนบอกว่าคุณกำลังจะให้ใส่รหัสผ่านจากpasswdstdin

echo 'newpassword' |passwd root --stdin

ขอบคุณสำหรับการป้อนข้อมูล --stdin ไม่รองรับบน Ubuntu มันไม่ทำงาน
Chris

14
--stdinถูกคิดค่าเสื่อมราคาบนระบบ Linux รุ่นใหม่ ใช้chpasswdแทน:echo username:newpassword | chpasswd
2560 ไม่สามารถทำได้

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

จุดดีขอบคุณ ในกรณีนี้ฉันตกลงกับความเสี่ยงเนื่องจากนี่เป็นเพียงนักเทียบท่าที่ทำสิ่งเล็ก ๆ น้อย ๆ หากใครบางคนสามารถอ่านสคริปต์พวกเขาเป็นเจ้าของส่วนที่เหลือของเซิร์ฟเวอร์แล้ว ฉันจะจำไว้ว่าในครั้งต่อไป :)
Chris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.