Изменить пароль программно


11

В текущей версии 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вы можете ввести новый пароль для любого пользователя без необходимости знать текущий пароль этого пользователя.
— Роайма

expect(1)также может помочь.
— SailorCire

Обязательно учитывайте последствия для безопасности при программном изменении паролей.
— Джош Хабдас

Ответы:


18

Вы ищете chpasswdкоманду. Вы бы сделали что-то вроде этого:

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

Обратите внимание, что его нужно запускать с правами root, по крайней мере, с конфигурацией PAM по умолчанию. Но, по-видимому, запуск от имени пользователя root не является проблемой для сценария развертывания системы.

Кроме того, вы можете сделать несколько пользователей одновременно, введя в него несколько строк ввода.


9

Другой альтернативой является использование yesкоманды в вашем скрипте.

yes newpassword | passwd youruser

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

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

РЕДАКТИРОВАТЬ:

Этот ответ требует root-доступа. Извиняюсь за то, что не упомянул об этом ранее. Это метод, который я использую при выполнении задач администрирования, требующих root-доступа.


Вы пробовали это?
— Роайма

Да. Я использую этот метод в течение многих лет. Я проверил его, прежде чем опубликовать свой ответ, и снова только сейчас.
— Тимоти Мартин

Даже если предположить, что это passwdчтение, stdinа не с терминала (клавиатуры), как это может работать, когда passwdсначала запрашивается старый пароль пользователя, а затем запрашивается новый?
— Роайма

@roaima, возможно, Тимоти запускает его как root (что объясняет, почему он нуждается youruserв конце). Это может работать где-то ...
— Дероберт

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