Сейчас на КИТе нашли отличный способ сменить пароль пользователю из шелла (а значит и из скрипта). В общем, кто сталкивался с этой проблемой — поймут меня.
UPD: в комментариях указали другой способ смены пароля от рута:
root@host:~# 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, в которой нужно указать старый пароль. Чего я в общем-то вам не советую.
Ну и чтобы не было вопросов о том, что происходит:
inky@laptop1:~$ echo -e "oldpassword\nmegapassword\nmegapassword\n"
oldpassword
megapassword
megapassword
То есть мы на STDIN passwd скармливаем STDOUT echo. А echo и «жмет enter»
так вот че ты хотел тогда… жаль, что я мимо ушей пропустил твой призыв…
echo «username:password» | chpasswd и не извращайся =)
знание почерпнуто из одного из скриптов в составе оригинального набора lxc-утилиток
Смотри в статью, добавил, но это не панацея.
Не поверите. Во фряхе есть chpass
@sharikoff
Умху. А в солярисе нету. Я могу бесконечно продолжать :)
Во всех «не виндовс» есть команда passwd.
Пользоваться так.
passwd user -если ты рут или под судо
passwd — если ты юзер и меняешь пароль себе
Для скриптов есть expect
=)
sharikoff, не на всех системах стоит expect. И при написании скриптов, которые будет использовать кто-то кроме тебя — лучше на него не надеяться.
Кстати, passwd может и из файлов брать инфу. passwd user < filename
А в filename в таком же формате пароли: megapassword\nmegapassword
Спасибо.
Много времени прошло с начала дискуссии, но я добавлю кой-чего.
При использовании passwd в скрипте(например поточное создание пользователей+домдир+ещёчототам), ставьте проверку на передаваемую переменную $user(или какая она там будет). Если скрипт только в процессе написания/отладки, то есть риск передать пустую переменную и сменить пароль руту, а это может оказаться к дальней дороге…
P.S. Решил использовать chpasswd.
Чувак, от души, спасибо!