Я пытался получить сценарий ожидающего / bash, который может прочитать каждую строку файла CSV и получить как адрес хоста, так и пароль; поскольку все они различны для каждого MikroTik, к которому я пытаюсь получить доступ.
Недавно я отправил файл auto.rsc на несколько тысяч маршрутизаторов MikroTik, которые используются в качестве решения для жилых помещений. Этот файл заполнил жесткий диск (у него было сканирование IP, которое создало журнал, который сумел сделать документ). Это не позволяет мне отправлять дополнительные файлы auto.rsc для очистки журналов, так как нет свободного места.
Решением, которое я придумал, было использование ожидающего сценария для входа в систему и удаления файла auto.log. Это было успешно с моим сценарием RSA.
set timeout 3
set f [open "dynuList.txt"]
set dynu [split [read $f] "\n"]
close $f
foreach dynu $dynu {
spawn ssh -o "StrictHostKeyChecking no" -i mtk4.key admin+t@$dynu
expect {
"> " { send "\:do \{ file remove push.auto.log \} on-error\=\{ \[\] \}\r" }
"Connection refused" { catch {exp_close}; exp_wait; continue }
eof { exp_wait; continue }
}
expect ".*"
close
wait
}
Сценарий, с которым у меня возникают проблемы, выглядит следующим образом:
n=`wc -l hostPasswordDynuList.csv | awk '{print$1}'`
i=1
while [ $i -le $n ]
do
host='awk -F "," 'NR==$i {print $1}' hostPasswordDynuList.csv'
password='awk -F "," 'NR==$i {print $2}' hostPasswordDynuList.csv'
./removeLogExpect.sh $host $password
i=`expr $i + 1`
done
Который должен передать переменные этому ожидаемому скрипту
#!/usr/bin/bash/expect -f
set timeout 3
set host [lindex $argv 0]
set password [lindex $argv 1]
spawn ssh -o "StrictHostKeyChecking no" admin+t@$host
expect {
"password: " { send $password"\r" }
"Connection refused" { catch {exp_close}; exp_wait; continue }
eof { exp_wait; continue }
}
expect {
".*" { send "\:do \{ file remove push.auto.log \} on-error\=\{ \[\] \}\r" }
}
expect ".*"
close
wait
Я надеялся, что сценарий сможет подключиться, а затем войти в систему к каждому MikroTik, для которого не настроены ключи RSA, а затем к команде для очистки файла auto.log. В нынешнем виде сценарий, похоже, не передает переменные ожидаемой половине вообще. Любая помощь будет оценена.