Posso modificare una password utente in Linux dalla riga di comando senza interattività?


15

Ho un caso d'uso specifico in cui mi piacerebbe davvero poter cambiare la password di un utente con un singolo comando senza interattività. Questo viene fatto in modo sicuro (su SSH e su un sistema con un solo utente in grado di accedere), quindi va bene esporre la nuova password (e anche quella vecchia, se necessario) sulla riga di comando. FWIW, è un sistema Ubuntu.

Voglio solo evitare di aggiungere qualcosa di simile a Expect a questo sistema solo per questo compito.


3
Per coloro che vogliono farlo su FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman il

Risposte:



5

È possibile utilizzare usermodcon l' -popzione per fornire un hash della password (non la password effettiva). Puoi generare l'hash della password usando qualcosa come mkpasswd -m sha-256omkpasswd -m md5


1
... Ma il mio sistema AIX non ha usermod: '(
Riparerò

3

Sicuro.

  1. Hash la password sul tuo sistema locale.
  2. Connettiti al computer remoto (dove vuoi cambiare la password)
  3. Alimentano l'hash della password e il nome utente per un creativo sedscript che aggiorna file di password del sistema ( /etc/shadow, /etc/master.passwd, qualunque cosa capita di essere).

1

L' passwdutilità ha un'opzione --stdin che afferma:

Questa opzione viene utilizzata per indicare che passwd deve leggere la nuova password dall'input standard, che può essere una pipe.

Sintassi:

echo "newpass" | passwd --stdin user1

Anche se hai detto che non ti interessa, potresti inserire la password in un file di testo e poi fare cat pass.txtinvece del comando echo, in questo modo non compare nella cronologia di bash.


È lui. echo VerySecret | passwd --stdin username
MadHatter,

5
Il mio sistema Ubuntu non ha --stdinun'opzione per passwd.
Jeff Ferland,

Hai ragione, non lo fa. Ho controllato sia un sistema CentOS che un Mac e hanno l'opzione --stdin, quindi la sua rimozione deve essere una cosa di Ubuntu.
Safado,

1
@RyanM. Neanche FreeBSD (e AFAIK NetBSD e OpenBSD, AIX, HP-UX e Solaris sono i miei ultimi) --stdin- principalmente perché è un grosso buco di sicurezza che attende di accadere :-)
voretaq7,

1
@quanta: oppure inizia la echo "newpass" | passwd --stdin user1linea con uno spazio; in questo modo non andrà affatto a colpire la storia.
Janne Pikkarainen,

1

Se l' --stdinopzione non funziona possiamo sostanzialmente usare due opzioni:

  1. O usa un'altra utility chiamata chpaswdnel tuo script.
  2. O usare echo "current_password\nnew_password\nnew_password" | passwd user_name
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.