LINUX.ORG.RU
решено ФорумAdmin

freeradius автоматическая замена паролей

 , , , ,


0

1

Привет ЛОР, возникла необходимость генерить пароли для доступа к wifi и высылать их на почту, с почтой проблем нет, но вот заменять пароли в файле users проблемно, помогите со скриптом. Необходимо чтобы можно было список номеров использовать (перед sed менять именно нужную строку), если через for то он меняет все строки, while read line тоже, нужно чтобы у каждого юзера был свой пароль(юзеров около сотни, так что копировать сто раз sed не вижу смысла).

Если делать так, то он создаст около 100 passgen-N.txt

cat_pass=$(cat /var/SCRIPTS/passgen.txt)

list_users=«12 16 17 21»

for i in $list_users; do

makepasswd --char 14 > /var/SCRIPTS/passgen-«$i».txt

cat_pass=$(cat /var/SCRIPTS/passgen-«$i».txt)

sed -i «$i s/\:\= \».*\«/\:\= \»$cat_pass\«/» /etc/freeradius/users

done

Итоговый вариант

list_users="12 16 17 21"


for i in $list_users; do
        cat_pass=$(makepasswd --char 14)
        sed -i "$i s/\:\= \".*\"/\:\= \"$cat_pass\"/" /etc/freeradius/users
done


Последнее исправление: sanekmihailow (всего исправлений: 9)

насколько мне понятно, тебе присваивание переменной cat_pass надо делать внутри цикла, после выполнения команды makepasswd. а вообще можно прямо в цикле сразу

cat_pass=$(makepasswd --char 14)

но тут же, в цикле, надо отправить пароль письмом, потому что пароль у тебя дальше нигде не сохраняется кроме конфига радиуса.


лучше сделай скрипт, который проводит операцию над одним юзером: генерирует пароль, правит его и отсылает.

change_pass.sh
i=$1
cat_pass=$(makepasswd --char 14 )
sed -i «$i s/\:\= \».*\«/\:\= \»$cat_pass\«/» /etc/freeradius/users
send_new_password_to_mail «$1» «$cat_pass»

выполняй для каждого юзера,
for i in 12 16 17 21  ; do 
./change_pass.sh $i 
done

bl ★★★
()
Ответ на: комментарий от bl

Спасибо, дельный совет, странно что я не подумал об этом

cat_pass=$(makepasswd --char 14 )

sanekmihailow
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.