Ubah Kata Sandi Secara Programatis

11

Dalam versi Raspian saat ini, saya tahu adalah mungkin untuk mengubah kata sandi pengguna yang saat ini masuk dari baris perintah seperti:

sudo passwd

yang kemudian akan meminta pengguna untuk memasukkan kata sandi baru dua kali. Ini akan menghasilkan output seperti:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Saya bertanya-tanya apakah ada cara yang mungkin untuk mengubah kata sandi secara terprogram, seperti dari skrip shell.

Saya mencoba membuat skrip konfigurasi untuk digunakan pada Raspberry Pis saya dan saya tidak ingin secara manual harus mengetikkan kata sandi baru untuk mereka.

James Taylor
sumber
1
Untuk mengubah kata sandi pengguna saat ini Anda tidak perlu awalan dengannya sudo. Jika Anda menggunakan sudomaka Anda dapat memaksakan kata sandi baru untuk setiap pengguna tanpa perlu mengetahui kata sandi pengguna saat itu.
roaima
expect(1)bisa membantu juga.
SailorCire
Pastikan untuk mempertimbangkan implikasi keamanan ketika secara program mengubah kata sandi.
Josh Habdas

Jawaban:

18

Anda sedang mencari chpasswdperintah. Anda akan melakukan sesuatu seperti ini:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

Perhatikan bahwa itu harus dijalankan sebagai root, setidaknya dengan konfigurasi PAM default. Tetapi mungkin dijalankan sebagai root bukan masalah untuk skrip penerapan sistem.

Selain itu, Anda dapat melakukan banyak pengguna sekaligus dengan mengumpankannya beberapa baris input.

derobert
sumber
9

Alternatif lain adalah dengan menggunakan yesperintah dalam skrip Anda.

yes newpassword | passwd youruser

Ini akan mengirim newpasswordke passwdperintah untuk youruser.

Harus disebutkan bahwa pengaturan / modifikasi kata sandi pengguna melalui skrip dapat menimbulkan risiko keamanan dan harus dihindari sedapat mungkin.

EDIT:

Jawaban ini membutuhkan akses root. Permintaan maaf karena tidak menyebutkan ini sebelumnya. Ini adalah metode yang saya gunakan saat melakukan tugas administrasi yang memerlukan akses root.

Timothy Martin
sumber
Sudahkah Anda mencoba ini?
roaima
Iya. Saya telah menggunakan metode ini selama bertahun-tahun. Saya mengujinya sebelum memposting jawaban saya dan lagi sekarang.
Timothy Martin
Bahkan dengan anggapan bahwa itu passwdmembaca dari stdinbukan terminal (keyboard), bagaimana ini bisa bekerja ketika passwddiminta pertama untuk kata sandi lama pengguna dan kemudian meminta yang baru?
roaima
@roaima mungkin Timothy menjalankannya sebagai root (yang akan menjelaskan mengapa ia membutuhkannya youruserdi akhir). Mungkin berhasil di suatu tempat ...
derobert
1
@roaima passwdPerintah dari utilitas bayangan Linux menerima input yang dialihkan (tidak seperti misalnya OpenSSH ssh). Menggunakan yesbukan ide yang baik: itu memaparkan kata sandi kepada pengintai yang melihat daftar proses pada waktu yang salah. Menggunakan echotidak akan memiliki cacat ini karena itu adalah builtin shell.
Gilles 'SO- stop being evil'