Зараз на кита знайшли відмінний спосіб змінити пароль користувачу з шелла (а значить і з скрипта). Загалом, хто стикався з цією проблемою - зрозуміють мене.
# Echo "username: password" | chpasswd
Такий спосіб теж підходить, але не є універсальним. Наприклад, у FreeBSD утиліти chpasswd немає.
EOUPD
Змінимо пароль руту на megapassword (запуск від рута):
root @ host:
# Echo -e "megapassword \ nmegapassword \ n" | passwd
Змінимо пароль користувачу username (запуск від рута)
root @ host:
# Echo -e "megapassword \ nmegapassword \ n" | passwd username
Для того, що б було зрозуміліше, покажу що в лапках з пробілами:
«Megassword \ n megapassword \ n», де megapassword - новий пароль, а \ n - «натискання» клавіші enter (а точніше - перенесення рядка)
Змінимо пароль користувачу username при запуску від username:
username:
$ Echo -e "oldpassword \ nmegapassword \ nmegapassword \ n" | passwd
Тут додається третій рядок у висновку echo, в якій потрібно вказати старий пароль. Чого я в общем-то вам не раджу.
Ну і щоб не було питань про те, що відбувається:
$ Echo -e "oldpassword \ nmegapassword \ nmegapassword \ n"
oldpassword
megapassword
megapassword
Тобто ми на STDIN passwd скармливаем STDOUT echo. А echo і «тисне enter»