2012-03-27 6 views
0

Ich schreibe ein Skript zum Lesen von Benutzername, Passwort und Host-Informationen aus einer Datei. Ich parse dann diese Informationen, um die Variablen zu erhalten. Ich möchte dann diese Variablen zu einem expect-Skript hinzufügen, das alle IP-Adressen in meiner Datei liest und bestimmte Befehle auf den entfernten Geräten ausführt, an denen ich mich anmelden möchte. Das Skript funktioniert, wenn es sich mit einem bekannten Host verbindet. Was ich jedoch sehe, ist, dass ein Gerät nicht läuft und das System mit dem folgenden Fehler fortfährt. ssh: connect 192.168.3.2 Port 22 zu bewirten: Keine RouteFehler keine Route zum Host mit expect beim Lesen Host-Benutzernamen und Passwörter aus einer CSV-Datei

die Datei Gastgeber Ich mag würde 2 Dinge 1. Überspringen Sie den Host tun und mit dem nächsten Host 2. Protokoll der Host zu verschieben, ist in eine andere Datei, damit ich das Netzwerkproblem zu diesem Host beheben kann.

Bitte beachten Sie das folgende Skript. Bitte jede Hilfe wird sehr akzeptiert.

#! /usr/bin/expect -f 



## Read the file 
set fid [open /csv_pars/employee1.csv] 
set content [read $fid] 
close $fid 

## Split into records on newlines 
set records [split $content "\n"] 

## Iterate over the records 
foreach rec $records { 

## Split into fields on comma 
set fields [split $rec ","] 
## Assign fields to variables and print some out... 
lassign $fields\ ipaddr username password 
puts "$ipaddr" 
puts "$username" 
puts "$password" 





if {$ipaddr == ""} continue 
spawn ssh -X "[email protected]$ipaddr" 
sleep 2 
expect "password:" 


sleep 2 
send "$pass\r" 
expect "$" 
send -- "ls -l\r" 
expect "$" 
send -- "exit\r" 


expect eof 




} 

Antwort

0

Sie müssen erwarten, dass eine von zwei Dinge zu sehen: die Passwortabfrage oder die Fehlermeldung:

spawn ssh -X "[email protected]$ipaddr" 
expect { 
    -re "password: ?$" { 
     send "$pass\r" 
     expect "$" 
     send -- "ls -l\r" 
     expect "$" 
     send -- "exit\r" 
     expect eof 
    } 
    "No route to host" { 
     set fid [open error.log a] 
     puts $fid "[clock format [clock seconds]]: No route to host $ipaddr" 
     close $fid 
    } 
} 
+0

Dank Glen Ich werde versuchen, diese – yawdmac

+0

Glen Ich habe ein Problem, wenn ich die eingestellte Fehlerprotokoll Ich bin mir nicht sicher, wo es loggt. Ich suchte den Server und konnte das Protokoll nicht finden. Bedeutet dies, dass ich zuerst eine Protokolldatei erstellen muss. – yawdmac

Verwandte Themen