Czy mogę zmienić hasło użytkownika w systemie Linux z wiersza poleceń bez interakcji?


15

Mam konkretny przypadek użycia, w którym naprawdę chciałbym móc zmienić hasło użytkownika za pomocą jednego polecenia bez interakcji. Odbywa się to w bezpieczny sposób (przez SSH i w systemie, w którym zalogowany może być tylko jeden użytkownik), więc w wierszu poleceń można udostępnić nowe hasło (a nawet stare, jeśli to konieczne). FWIW, to system Ubuntu.

Chcę tylko uniknąć dodawania czegoś podobnego do tego systemu dla tego jednego zadania.


3
Dla tych, którzy chcą to zrobić na FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman,

Odpowiedzi:



5

Możesz użyć usermodz -popcją zapewnienia skrótu hasła (nie rzeczywistego hasła). Możesz wygenerować skrót hasła za pomocą czegoś takiego jak mkpasswd -m sha-256lubmkpasswd -m md5


1
... Ale mój system AIX nie ma usermod: '(- Naprawię tagi w pytaniu.
voretaq7

3

Pewnie.

  1. Hash hasło w systemie lokalnym.
  2. Połącz się ze zdalnym komputerem (gdzie chcesz zmienić hasło)
  3. Nakarm hashed hasło i login do twórczego sedskrypt, który aktualizuje plik haseł Twojego systemu ( /etc/shadow, /etc/master.passwd, co zdarza się).

1

passwdNarzędzie ma --stdin opcję, która stwierdza:

Ta opcja służy do wskazania, że ​​hasło powinno czytać nowe hasło ze standardowego wejścia, którym może być potok.

Składnia:

echo "newpass" | passwd --stdin user1

Mimo że wspomniałeś, że cię to nie obchodzi, możesz umieścić hasło w pliku tekstowym, a następnie zrobić to cat pass.txtzamiast polecenia echo, w ten sposób nie pojawi się ono w historii bash.


To jest to. echo VerySecret | passwd --stdin username
MadHatter

5
Mój system Ubuntu nie ma --stdinopcji dla passwd.
Jeff Ferland

Masz rację, nie ma. Sprawdziłem zarówno na systemie CentOS, jak i na Macu i mają one opcję --stdin, więc usunięcie jej musi być kwestią Ubuntu.
Safado

1
@RyanM. FreeBSD (i AFAIK NetBSD i OpenBSD, AIX, HP-UX i Solaris ostatnio sprawdzam) też nie obsługują --stdin- głównie dlatego, że czeka na to wielka luka bezpieczeństwa :-)
voretaq7

1
@quanta: Lub rozpocznij echo "newpass" | passwd --stdin user1wiersz spacją; w ten sposób w ogóle nie przejdzie do historii bashów.
Janne Pikkarainen

1

Jeśli --stdinopcja nie działa, możemy w zasadzie użyć dwóch opcji:

  1. Albo użyj innego narzędzia zwanego chpaswdw twoim skrypcie.
  2. Albo użyj echo "current_password\nnew_password\nnew_password" | passwd user_name
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.