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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2021-05-12 10:38:54

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

[bash] pętla ssh z expectem w środku

Hej

Temat zapewne znany każdemu, kto masowo łaczy sie z urzadzeniami przez SSH wywolujac petle while.

Kod:

while IFS= read -r line; do
      ip=`echo $line | cut -f9 -d ";" | tr -d '"'`
      skrypt.expect $ip 
done < ipki.txt

W pliku skrypt.expect:

Kod:

#!/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

 

#2  2021-05-13 13:33:37

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: [bash] pętla ssh z expectem w środku

Jeżeli ciągle ci tak bardzo ten read bruździ, to może spróbuj alternatywy, w postaci np:

Kod:

#!/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:

Kod:

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)


a to feler westchnął seler

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)