Ich versuche ein Expect-Skript zu schreiben, das ssh in einen Server schreiben würde, sudo su senden, dann den iptables-Status überprüfen und die Ausgabe in eine Protokolldatei auf dem Server schreiben. Unten ist das Skript.Skript erwarten ssh gibt ungültigen Befehlsnamen zurück
1 #!/usr/bin/expect
2 exp_internal 1
3 log_user 0
4 set timeout 10
5 set password "******"
6
7 spawn /usr/bin/ssh -l subhasish *.*.*.* -p 10022
8
9 expect {
10 -re "password: " {send "$password\r"}
11 -re "$ " {send "sudo su\r"}
12 -re "[sudo] password for subhasish:" {send "$password\r"}
13 -re "# " {send "service iptables status\r"}
14 }
15 set output $expect_out(buffer)
16 send "exit\r"
17 puts "$output\r\n" >> output.log
Aber während im Debug-Modus laufen, bekomme ich Fehler wie folgt;
expect -d testcase
expect version 5.44.1.15
argv[0] = expect argv[1] = -d argv[2] = testcase
set argc 0
set argv0 "testcase"
set argv ""
executing commands from command file testcase
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {24105}
invalid command name "sudo"
while executing
"sudo"
invoked from within
"expect {
-re "password: " {send "$password\r"}
-re "$ " {send "sudo su\r"}
-re "[sudo] password for subhasish:" {send "$password\r"}
..."
(file "testcase" line 9)
Nicht sicher, wo ich falsch liege. Es sagt ungültigen Befehlsnamen "sudo", ich denke, das ist, weil erwarten, nicht verstehen, diesen Befehl. Wie man es umgeht. Bitte helfen Sie. Vielen Dank.
Ich habe das sudo su auf "password for subhasish:" geändert und auch wie du es erwähnt hast, es funktioniert auch nicht; Verwenden Sie den unten aufgeführten Code, #!/usr/bin/expect -f #!/Bin/bash eingestellten Timeout 60 log_user 1 Satz Host *. *. *. * set password ****** set user Subhasish Satz Logfile output.txt Laich ssh -p 10022 $ user @ $ host erwarten "* assword: *?" send - "$ password \ r" log_user 1 erwarten "$" send - "sudo su \ r" erwarten "Passwort für Subhasish:" send - - "$ password \ r" erwarten "#" senden - "service iptables status \ r" log_file /home/subhasish/output.log erwarten "#" log_file senden - "exit \ r"; senden - "exit \ r"; Exit 0 –
Die manuelle Protokollierung sieht so aus, [root @ localhost subhasish] # ssh -p 10022 [email protected]*.*.*.* [email protected]*.*.*.* Passwort: Letzte Anmeldung: Mo Apr 29 07:19:52 2013 von *. *. *.* [Subhasish @ testhost ~] $ sudo su [sudo] Passwort für Subhasish: [root @ testhost Subhasish] # –
Debug-Skript zeigt seine in erwarten stecken zu bleiben: erwarten: bedeutet „\ r \ nlast Login: Mo Apr 29 07:35:36 2013 von *. *. *. * \ R \ r \ n \ u001b] 0; subhasish @ testhost: ~ \ u0007 "(spawn_id exp4) match glob muster" passwort für subhasish: "? nein [subhasish @ testhost ~] $ erwarten: "\ r \ nLetzte Anmeldung: Mo Apr 29 07:35:36 2013 von *. *. *. * \ r \ r \ n \ u001b] 0; subhasish @ testhost: ~ \ u0007 \ u001b [? 1034h [subhasish @ testhost ~] $ "(spawn_id exp4) match glob muster" passwort für subhasish: "? no –