Bisakah saya mengubah kata sandi pengguna di Linux dari baris perintah tanpa interaktivitas?

15

Saya memiliki kasus penggunaan khusus di mana saya benar-benar ingin dapat mengubah kata sandi pengguna dengan satu perintah tanpa interaktivitas. Ini dilakukan dengan cara yang aman (lebih dari SSH, dan pada sistem dengan hanya satu pengguna yang dapat login), jadi tidak apa-apa untuk mengekspos kata sandi baru (dan bahkan yang lama, jika perlu) pada baris perintah. FWIW, ini adalah sistem Ubuntu.

Saya hanya ingin menghindari harus menambahkan sesuatu seperti-berharap untuk sistem ini hanya untuk tugas yang satu ini.

Paul Hoffman
sumber
3
Bagi mereka yang ingin melakukan ini di FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman

Jawaban:

25

Anda bisa menggunakan chpasswd .

echo user:pass | /usr/sbin/chpasswd
xofer
sumber
5

Anda dapat menggunakan usermoddengan -ppilihan untuk memberikan hash password (bukan password yang sebenarnya). Anda dapat membuat hash kata sandi menggunakan sesuatu seperti mkpasswd -m sha-256ataumkpasswd -m md5

rebus
sumber
1
... Tetapi sistem AIX saya tidak memiliki usermod: '(- Saya akan memperbaiki tag pada pertanyaan.
voretaq7
3

Tentu.

  1. Hash kata sandi di sistem lokal Anda.
  2. Hubungkan ke mesin jarak jauh (tempat Anda ingin mengubah kata sandi)
  3. Memberi makan hash sandi & nama pengguna untuk kreatif sedscript yang update file password sistem anda ( /etc/shadow, /etc/master.passwd, apa pun itu terjadi menjadi).
voretaq7
sumber
1

The passwdutilitas memiliki opsi --stdin yang menyatakan:

Opsi ini digunakan untuk menunjukkan bahwa passwd harus membaca kata sandi baru dari input standar, yang dapat berupa pipa.

Sintaksis:

echo "newpass" | passwd --stdin user1

Meskipun Anda menyebutkan bahwa Anda tidak peduli, Anda bisa memasukkan kata sandi dalam file teks dan kemudian melakukan cat pass.txtalih - alih perintah echo, sehingga tidak muncul dalam bash history.

Safado
sumber
Itu dia. echo VerySecret | passwd --stdin username
MadHatter
5
Sistem Ubuntu saya tidak memiliki --stdinopsi untuk passwd.
Jeff Ferland
Anda benar, tidak. Saya memeriksa pada sistem CentOS dan pada Mac dan mereka memiliki opsi --stdin, jadi penghapusan itu harus menjadi hal Ubuntu.
Safado
1
@RyanM. FreeBSD (dan AFAIK NetBSD dan OpenBSD, AIX, HP-UX dan Solaris terakhir saya periksa) tidak mendukung --stdinbaik - terutama karena itu adalah lubang keamanan raksasa besar yang menunggu untuk terjadi :-)
voretaq7
1
@quanta: Atau mulai echo "newpass" | passwd --stdin user1garis dengan spasi; dengan cara itu tidak akan menjadi bash history sama sekali.
Janne Pikkarainen
1

Jika --stdinopsi tidak berfungsi, pada dasarnya kami dapat menggunakan dua opsi:

  1. Baik gunakan utilitas lain yang disebut chpaswddalam skrip Anda.
  2. ATAU gunakan echo "current_password\nnew_password\nnew_password" | passwd user_name
Sanjay s.
sumber