Debian.pro/

Про Debian


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

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

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»


Комментарии (10):

  1. oxcd8o :

    так вот че ты хотел тогда… жаль, что я мимо ушей пропустил твой призыв…
    echo «username:password» | chpasswd и не извращайся =)
    знание почерпнуто из одного из скриптов в составе оригинального набора lxc-утилиток

  2. Смотри в статью, добавил, но это не панацея.

  3. Не поверите. Во фряхе есть chpass

  4. @sharikoff
    Умху. А в солярисе нету. Я могу бесконечно продолжать :)

  5. sharikoff :

    Во всех «не виндовс» есть команда passwd.
    Пользоваться так.
    passwd user -если ты рут или под судо
    passwd — если ты юзер и меняешь пароль себе
    Для скриптов есть expect
    =)

  6. sharikoff, не на всех системах стоит expect. И при написании скриптов, которые будет использовать кто-то кроме тебя — лучше на него не надеяться.

  7. Juice :

    Кстати, passwd может и из файлов брать инфу. passwd user < filename
    А в filename в таком же формате пароли: megapassword\nmegapassword

  8. Павел :

    Много времени прошло с начала дискуссии, но я добавлю кой-чего.
    При использовании passwd в скрипте(например поточное создание пользователей+домдир+ещёчототам), ставьте проверку на передаваемую переменную $user(или какая она там будет). Если скрипт только в процессе написания/отладки, то есть риск передать пустую переменную и сменить пароль руту, а это может оказаться к дальней дороге…
    P.S. Решил использовать chpasswd.

  9. Sergey :

    Чувак, от души, спасибо!

Написать комментарий