Próbuję napisać skrypt, który będzie ssh do serwera, wysłać sudo su, a następnie sprawdzić stan iptables i umieścić dane wyjściowe w pliku dziennika na serwerze. Poniżej znajduje się skrypt.oczekiwać skryptu do ssh zwraca niepoprawną nazwę polecenia
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
Ale podczas uruchamiania w trybie debugowania otrzymuję komunikat o błędzie;
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)
Nie jestem pewien, dokąd zmierzam. Mówi nieprawidłowa nazwa polecenia "sudo", myślę, że to dlatego, że nie rozumiem tych poleceń. Jak obejść to. Proszę pomóż. Dzięki.
Zmieniłem sudo su, spodziewając się "hasła do subhasish:" oraz tego, o czym wspomniałeś, ani przypadkiem, że działa; używając zaktualizowanego poniższego kodu, #!/usr/bin/expect -f #!/Bin/bash zestaw limit czasu 60 log_user 1 zestaw hosta *. *. *. * zestaw hasło ****** zestaw subhasish użytkownik zestaw logfile output.txt tarło ssh -p 10022 $ user @ $ host oczekiwać "assword *: *" wyślij - "$ hasło \ r" log_user 1 oczekiwać "$" Wyślij - "sudo su \ r" oczekiwać "hasło subhasish:" wyślij - - "$ password \ r" oczekiwać "#" send - "stan usługi iptables \ r" plik_logowania /home/subhasish/output.log oczekiwać "#" log_file send - "exit \ r"; send - "exit \ r"; exit 0 –
Ręczne logowanie wygląda następująco, [root @ localhost subhasish] # ssh -p 10022 [email protected]*.*.*.* [email protected]*.*.*.* haslo: Ostatnie logowanie: poniedziałek 29 kwietnia 07:19:52 2013 od *. *. *.* [subhasish @ testhost ~] $ sudo su [sudo] password dla subhasish: [root @ testhost subhasish] # –
skrypt debug pokazuje jej utknięcie w spodziewać: spodziewać: czy „\ r \ nostatnia logowanie: Mon 29 kwietnia 07:35:36 2013 od *. *. *. * \ R \ r \ n \ u001b] 0; subhasish @ testhost: ~ \ u0007 "(spawn_id exp4) pasuje do wzorca globu" hasło do subhasish: "? no [subhasish @ testhost ~] $ oczekiwać: robi "\ r \ nNiski login: pon. 29 kwietnia 07:35:36 2013 od *. *. *. * \ r \ r \ n \ u001b] 0; subhasish @ testhost: ~ \ u0007 \ u001b [? 1034h [subhasish @ testhost ~] $ "(spawn_id exp4) pasuje do wzorca globalnego" hasło dla subhasish: "? no –