Bagaimana saya bisa mengatur kata sandi root dalam wadah buruh pelabuhan dari skrip?

11

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.

Chris
sumber

Jawaban:

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

akan membuka sembulan, meminta kata sandi, dan mengembalikannya. Tidak ada kata sandi yang disimpan dalam skrip

Jika Anda memiliki wadah buruh pelabuhan di mana Anda perlu mengatur kata sandi, tanpa peduli banyak tentang keamanan, Anda bisa menambahkan pernyataan di Dockerfile:

RUN echo "root:root" | chpasswd
Ulf Samuelsson
sumber
Saya memiliki cara yang sama untuk mengatur metode seperti milik Anda di dua Dockerfile saya (proyek yang berbeda, tetapi sama di bagian-bagian penting). Tetapi satu bekerja (saya bisa ssh untuk itu) yang lain tidak mengizinkan saya. Ada yang tahu kenapa?
ismailsunni
3
+1 Jawaban akan lebih transparan jika dijelaskan stdin untuk chpasswd:echo username:newpassword | chpasswd
Jonathan Komar
5

Ini tidak terkait dengan Docker. Anda harus secara eksplisit mengatakan passwdbahwa Anda akan memberikan kata sandi stdin.

echo 'newpassword' |passwd root --stdin
pengguna1700494
sumber
Terima kasih atas masukannya. --stdin tidak didukung di ubuntu. Itu tidak bekerja.
Chris
14
--stdintelah disusutkan pada sistem Linux yang lebih baru. Gunakan chpasswdsebagai gantinya:echo username:newpassword | chpasswd
unblevable
1

Ini berfungsi dengan sempurna di Ubuntu 14.04.4 LTS:

Dalam skrip yang membangun kembali wadah (yang seharusnya berjalan di "host"), tambahkan baris ini:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd
Chris
sumber
Memasukkan kata sandi yang sebenarnya dalam sebuah skrip adalah cara yang sangat tidak aman untuk menangani kata sandi. Akan jauh lebih aman untuk memasukkan kata sandi hash yang tepat ke dalam skrip dan menggunakan usermoddaripada passwd.
kasperd
Poin bagus, terima kasih. Dalam hal ini saya setuju dengan risikonya, karena ini hanya sebuah wadah buruh pelabuhan yang melakukan sedikit hal. Jika seseorang dapat membaca skrip, mereka sudah memiliki sisa server. Saya akan mengingatnya untuk waktu berikutnya :).
Chris