Здравствуйте! Есть скрипт для смены паролей пользователей в автоматическом режиме:#!/bin/sh
USERNAME=user
USERPASS=password
TEMPFILE=/var/tmp/pass
echo $USERPASS > $TEMPFILE
echo $USERPASS >> $TEMPFILE
echo >> $TEMPFILE
passwd $USERNAME < $TEMPFILE
rm -f $TEMPFILEИ вроде должен работать, но вся загвоздка в том, что при выполнении команды passwd открывается диалоговое окно для ручного ввода данных, при этом данные из временного файла не берутся. Не могу разобраться, в чем загвоздка.
Если кто может, помогите дельным советом или укажите на ошибку в скрипте...
Заранее благодарен...
>данные из временного файла не берутся. Не могу разобраться, в чем
>загвоздка.
>Если кто может, помогите дельным советом или укажите на ошибку в скрипте...не знаю, как в Solaris, но, возможно, так не особо отлично от прочих *NIX. там ведь наверняка надо подтверждать пароль при смене? такой "полуинтерактивный" процесс. может, есть смысл посмотреть в сторону скриптов на expect?
>[оверквотинг удален]
>passwd $USERNAME < $TEMPFILE
>rm -f $TEMPFILE
>
>И вроде должен работать, но вся загвоздка в том, что при выполнении
>команды passwd открывается диалоговое окно для ручного ввода данных, при этом
>данные из временного файла не берутся. Не могу разобраться, в чем
>загвоздка.
>Если кто может, помогите дельным советом или укажите на ошибку в скрипте...
>
>Заранее благодарен...Не знаю как в Солярисе, в линухе есть опция --stdin..
Кстати, во фряхе ее нету...
Но выход есть, см. expect (типа шелл для интерактивных приложений)
>Но выход есть, см. expect (типа шелл для интерактивных приложений)http://www.wellho.net/mouth/1174_Installing-Tcl-and-Expect-o...
>
>>Но выход есть, см. expect (типа шелл для интерактивных приложений)
>
>http://www.wellho.net/mouth/1174_Installing-Tcl-and-Expect-o...гораздо проще поставить http://empty.sourceforge.net
>Не знаю как в Солярисе, в линухе есть опция --stdin..
>Кстати, во фряхе ее нету...Есть, но по-другому выглядит.
>>Не знаю как в Солярисе, в линухе есть опция --stdin..
>>Кстати, во фряхе ее нету...
>
>Есть, но по-другому выглядит.Ради повышения уровня знаний...Как?
#passwd -h
passwd: option requires an argument -- h
usage: passwd [-ly] [-d domain] [-h host] [user]
# uname -a
FreeBSD carbase 6.2-STABLE FreeBSD 6.2-STABLE #1: Mon Mar 26 20:48:42 MSD 2007Или в ней через конвейер можно? (типа echo pass | passwd username)
>[оверквотинг удален]
>
>#passwd -h
>passwd: option requires an argument -- h
>usage: passwd [-ly] [-d domain] [-h host] [user]
># uname -a
>FreeBSD carbase 6.2-STABLE FreeBSD 6.2-STABLE #1: Mon Mar 26 20:48:42 MSD 2007
>
>
>Или в ней через конвейер можно? (типа echo pass | passwd username)
>Под рукой фряхи нет, но уточните сами. Примерно так:
echo pass | pw useradd qwe -h0
если пароль открытый, и так:
echo pass | pw useradd qwe -H0
если зашифрованный.
>Под рукой фряхи нет, но уточните сами. Примерно так:
>echo pass | pw useradd qwe -h0
>если пароль открытый, и так:
>echo pass | pw useradd qwe -H0
>если зашифрованный.Фряха это конечно хорошо. Ну а ближе к теме, по скрипту то как?
Я еще не сильно в Unix системах разбираюсь
>Фряха это конечно хорошо. Ну а ближе к теме, по скрипту то
>как?
>Я еще не сильно в Unix системах разбираюсьВам же все ответили уже. И про линукс и про фрибсд есть подсказки. Используйте.
>Я еще не сильно в Unix системах разбираюсьКстати, есть в линуксе еще chpasswd. Посмотрите маны на эту тему, если нужно сразу нескольким пользователям пароли поменять.
Как пример скрипта:=====================================================
#!/bin/sh
USERNAME="Rinsy"
USERPASS="SeCreT"echo "#!/usr/bin/expect -f
spawn passwd $USERNAME
expect \"Password:\" { send \"$USERPASS\\n\"}
expect \"Password:\" { send \"$USERPASS\\n\"}
expect \"#\" {send \"exit\\n\"}
" > _TMP
chmod 755 _TMP
./_TMP
rm -f _TMP
exit
===================================================
>[оверквотинг удален]
>spawn passwd $USERNAME
>expect \"Password:\" { send \"$USERPASS\\n\"}
>expect \"Password:\" { send \"$USERPASS\\n\"}
>expect \"#\" {send \"exit\\n\"}
>" > _TMP
>chmod 755 _TMP
>./_TMP
>rm -f _TMP
>exit
>===================================================Чего мудрить?
echo "Rinsy:SeCreT" | chpasswd
>Если кто может, помогите дельным советом или укажите на ошибку в скрипте...Вот я и показал ошибку в его скрипте...
:-)