Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Hej
Temat zapewne znany każdemu, kto masowo łaczy sie z urzadzeniami przez SSH wywolujac petle while.
while IFS= read -r line; do ip=`echo $line | cut -f9 -d ";" | tr -d '"'` skrypt.expect $ip done < ipki.txt
W pliku skrypt.expect:
#!/usr/bin/expect -f set ip [lindex $argv 0]; spawn ssh admin@$ip -o StrictHostKeyChecking=no -o ConnectTimeout=3 -o UserKnownHostsFile=/dev/null expect "assword:" send "blahblah" ... interact
Problem: pętla konczy sie po wykonaniu komendy na pierwszym urzadzeniu. Jedynym znanym mi hintem jest zamiana
ssh admin@$ip -o StrictHostKeyChecking=no -o ConnectTimeout=3 -o UserKnownHostsFile=/dev/null
na
ssh -n admin@$ip -o StrictHostKeyChecking=no -o ConnectTimeout=3 -o UserKnownHostsFile=/dev/null
O ile dobrze dziala to na pętle to nie działa w połaczeniu z expectem. Czy ktos ma na to rozwiazanie?
Ostatnio edytowany przez DeWu (2021-05-12 10:41:11)
Offline
Jeżeli ciągle ci tak bardzo ten read bruździ, to może spróbuj alternatywy, w postaci np:
#!/bin/bash IFS_old="$IFS" IFS=$'\n' for ip in $(cat ipki.txt); do #przy założeniu, że w ipki.txt w każdej linijce jest inne ip weryfikacja_czy_$ip_to_faktycznie_nr_ip || continue skrypt.expect "$ip" done
EDIT: W sumie bardziej elegancko byłoby podzielić to na dwie pętle, i potem iterować po tablicy z ipkami:
declare -a IPKI while IFS= read -r line; do ip="$(echo $line | cut -f9 -d ";" | tr -d '"' )" IPKI+=( "$ip" ) done < ipki.txt for ip in "${IPKI[@]}" skrypt.expect "$ip" done
Ostatnio edytowany przez seler (2021-05-16 20:45:57)
Offline
Strony: 1