Saya memiliki skrip yang berjalan pada host dan membuat / memulai / menghentikan wadah buruh pelabuhan. Saya ingin skrip mengubah kata sandi pengguna root di dalam wadah.
Karena wadah adalah server ssh, saya mencoba:
sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'
tetapi tidak berhasil. Sebelum melanjutkan dan menghabiskan lebih banyak waktu untuk debugging, saya ingin tahu apakah ada cara yang lebih cerdas untuk melakukannya.
Saya mengerti bahwa "cara buruh pelabuhan" yang tepat adalah membuat skrip yang dijalankan oleh Dockerfile, yang menarik kata sandi dari volume bersama dan menjadikannya sebagai kata sandi root. Ini terdengar rumit, tapi saya tahu bagaimana melakukannya dan bekerja dengan baik untuk gambar buruh pelabuhan lain yang saya gunakan. Tetapi saya tidak ingin melakukannya untuk yang satu ini.
Saya hanya perlu perintah yang menggunakan Docker atau ssh untuk mengubah kata sandi pengguna secara non-interaktif.
echo username:newpassword | chpasswd
Ini tidak terkait dengan Docker. Anda harus secara eksplisit mengatakan
passwd
bahwa Anda akan memberikan kata sandistdin
.sumber
--stdin
telah disusutkan pada sistem Linux yang lebih baru. Gunakanchpasswd
sebagai gantinya:echo username:newpassword | chpasswd
Ini berfungsi dengan sempurna di Ubuntu 14.04.4 LTS:
Dalam skrip yang membangun kembali wadah (yang seharusnya berjalan di "host"), tambahkan baris ini:
sumber
usermod
daripadapasswd
.