Змінити пароль програмно


12

У поточній версії Raspian я знаю, що можна змінити пароль поточного входу в систему з командного рядка так:

sudo passwd

який потім запропонує користувачеві ввести новий пароль двічі. Це дасть вихід таким чином:

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

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

Я намагаюся зробити сценарій конфігурації для розгортання на моєму Raspberry Pis, і мені не хочеться вручну вводити нові паролі для них.


1
Щоб змінити пароль поточного користувача, вам не потрібно префіксувати sudo. Якщо ви користуєтеся sudoцим, ви можете застосувати новий пароль для будь-якого користувача, не знаючи поточного пароля цього користувача.
roaima

expect(1)може також допомогти.
SailorCire

Не забудьте врахувати наслідки для безпеки під час програмної зміни паролів.
Джош Хабдас

Відповіді:


19

Ви шукаєте chpasswdкоманду. Ви зробите щось подібне:

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

Зауважте, що його потрібно запустити як root, принаймні з конфігурацією PAM за замовчуванням. Але, імовірно, запуск як root не є проблемою для сценарію розгортання системи.

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


9

Ще одна альтернатива - використовувати yesкоманду у своєму сценарії.

yes newpassword | passwd youruser

Це буде відправити newpasswordв passwdкоманду для youruser.

Слід зазначити, що встановлення / зміна паролів користувача за допомогою скриптів може становити небезпеку для безпеки і слід уникати, коли це можливо.

Редагувати:

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


Ви пробували це?
roaima

Так. Я використовую цей метод роками. Я перевірив це, перш ніж розмістити свою відповідь, і знову просто зараз.
Тимофій Мартін

Навіть якщо припустити, що passwdчитати з stdinтерміналу (клавіатури), як це може працювати, коли passwdспочатку з'явиться запит на старий пароль користувача, а потім на новий?
roaima

@roaima можливо Тимофій запускає його як корінь (що пояснило б, чому він потрібен youruserнаприкінці). Це може десь спрацювати ...
derobert

1
@roaima passwdКоманда від тіньових утиліт Linux приймає перенаправлений вхід (на відміну, наприклад, OpenSSH ssh). Використання yesне є гарною ідеєю: воно відкриває пароль снуперам, які переглядають список процесів не в той час. Використання echoне має цього дефекту, оскільки це вбудована оболонка.
Жил 'ТАК - перестань бути злим'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.