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

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 не является проблемой для сценария развертывания системы.

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

derobert
источник
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не будет иметь этого дефекта, потому что это встроенная оболочка.
Жиль "ТАК - перестань быть злым"