Меняем пароль пользователю из bash скрипта (или просто командой из шелла).

Материал из support.qbpro.ru

Сейчас на КИТе нашли отличный способ сменить пароль пользователю из шелла (а значит и из скрипта). В общем, кто сталкивался с этой проблемой — поймут меня. UPD: в комментариях указали другой способ смены пароля от рута:

root@host:~# echo "username:password" | chpasswd

Такой способ тоже подходит, но не является универсальным. Например, во FreeBSD утилиты chpasswd нет.

EOUPD

Суть такая: Сменим пароль руту на megapassword (запуск от рута):

root@host:~# echo -e "megapassword\nmegapassword\n" | passwd

Рабочий пример:

#!/bin/bash
newpass="newpassword\n"
echo -e $newpass$newpass| passwd -q username 2>/dev/null;

Сменим пароль пользователю 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, в которой нужно указать старый пароль. Чего я в общем-то вам не советую. Ну и чтобы не было вопросов о том, что происходит:

inky@laptop1:~$ echo -e "oldpassword\nmegapassword\nmegapassword\n"
oldpassword
megapassword
megapassword

То есть мы на STDIN passwd скармливаем STDOUT echo. А echo и «жмет enter»

взято тут