Чи можу я змінити пароль користувача в Linux з командного рядка без інтерактивності?


15

У мене є конкретний випадок використання, коли я дійсно хотів би мати можливість змінити пароль користувача однією командою без інтерактивності. Це робиться безпечним способом (як через SSH, так і в системі з лише одним користувачем, який може ввійти в систему), тож добре виставити новий пароль (і навіть старий, якщо потрібно) в командному рядку. FWIW, це система Ubuntu.

Я просто хочу уникати додавання чогось очікуваного в цю систему лише для цього одного завдання.


3
Для тих, хто хоче це зробити на FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Пол Хоффман

Відповіді:



5

Ви можете використовувати usermodз -pможливістю надати хеш пароль (не фактичний пароль). Ви можете генерувати хеш паролів, використовуючи щось на зразок mkpasswd -m sha-256абоmkpasswd -m md5


1
... Але в моїй системі AIX немає usermod: '(- я
виправлю

3

Звичайно.

  1. Зробити пароль у вашій локальній системі.
  2. Підключіться до віддаленої машини (де ви хочете змінити пароль)
  3. Потік хеш пароля & ім'я користувача для творчого sedсценарію , який оновлює файл паролів вашої системи ( /etc/shadow, /etc/master.passwd, все , що трапляється).

1

У цій passwdутиліті є опція --stdin, в якій зазначено:

Цей параметр використовується для вказівки, що passwd повинен прочитати новий пароль зі стандартного вводу, який може бути трубою.

Синтаксис:

echo "newpass" | passwd --stdin user1

Незважаючи на те, що ви згадали, що вам все одно, ви можете помістити пароль у текстовий файл, а потім виконати cat pass.txtзамість команди echo, щоб він не відображався в історії башів.


Це одне. echo VerySecret | passwd --stdin username
MadHatter

5
Моя система Ubuntu не має --stdinможливості для passwd.
Джефф Ферланд

Ти маєш рацію, це не так. Я перевірив і в системі CentOS, і на Mac, і у них є опція --stdin, тому видалення її повинно бути справою Ubuntu.
Сафадо

1
@RyanM. FreeBSD (і AFAIK NetBSD і OpenBSD, AIX, HP-UX та Solaris востаннє я перевіряю) теж не підтримують --stdin- головним чином, тому, що це велика гігантська діра в безпеці, яка чекає цього :-)
voretaq7

1
@quanta: Або почати echo "newpass" | passwd --stdin user1рядок з пробілу; таким чином він взагалі не піде в історію башти.
Janne Pikkarainen

1

Якщо --stdinпараметр не працює, ми можемо використовувати два варіанти:

  1. Або скористайтеся іншою утилітою, яка називається chpaswdу вашому сценарії.
  2. АБО використовуйте echo "current_password\nnew_password\nnew_password" | passwd user_name
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.