2012-01-11 12 views
6

piszę następujące oczekiwać skrypt w celu zautomatyzowania ssh logowanie do zdalnej maszynie Linux i uruchom komendę „cat /etc/APP_VERSION.txt plik”oczekiwać skrypt + jak ignorować ciągi jeśli nie pojawi

Sometime I nie pytano z polecenia ssh o:

"Are you sure you want to continue connecting (yes/no)?" 

Tak więc w tym przypadku pierwsze oczekiwania nadal czekają na ciąg "(tak/nie)?" - :(

I nie kontynuować do sekundy spodziewać - "hasło:"

Jak rozwiązać ten problem,

To znaczy, jeśli linia „Czy na pewno chcesz kontynuować łączący (tak? ?/nie) „ Czy nie wynika z ssh

Następnie musimy przejść do następnego spodziewać«hasło:», ale jak to zrobić

remark1 - w przypadku pytania” Czy jesteś pewien, że chcesz kontynuować połączenie (tak/nie)? ", Pojawia się wtedy Oczekuję, że skrypt działa dobrze bez żadnego problemu. .

remark2 - Nie mogę korzystać z limitu czasu wartość dodatnią (jako Timeout 10), ponieważ sama ssh mają opóźnienie

. . . .

Moja oczekiwać skrypt: (ta spodziewać jest częścią mojego skryptu ksh)

. 
    . 
    . 

    APP_MACHINE=172.12.6.190 


    set timeout -1 
    spawn ssh $APP_MACHINE 
     expect { 
       "(Are you sure you want to continue connecting yes/no)?" 
           { send "yes\r" } 
       } 
     expect password:  {send PASS123\r} 
    expect > {send "cat /etc/APP_VERSION.txt\r"} 
    expect > {send exit\r} 
    expect eof 

. 
. 
. 

. . . . .

przykładem ssh z moim komputerze linux

ssh APP_MACHINE 
    The authenticity of host 'APP_MACHINE (172.12.6.190)' can't be established. 
    RSA key fingerprint is 1e:8a:3d:b3:e2:8c:f6:d6:1b:16:65:64:23:95:19:7b. 
    Are you sure you want to continue connecting (yes/no)? 

Odpowiedz

7

ustawić limit czasu

zestaw limit czasu 10

będzie czekać na spodziewanej linii przez 10 sekund, a następnie przenieść na do następnego wiersza skryptu, jeśli nie zostanie odebrany w określonym czasie.

referencyjny http://linuxshellaccount.blogspot.com/2008/01/taking-look-at-expect-on-linux-and-unix.html

UPDATE: Jeżeli czas oczekiwania nie jest dopuszczalnym rozwiązaniem może spróbować użyć listę alternatywnych odpowiedzi do kierowania skrypt do przodu.

expect { 
"(Are you sure you want to continue connecting yes/no)?" { send "yes\r"; exp_continue } 
password:            {send PASS123\r; exp_continue} 
} 
+0

Niestety nie mogę tego użyć, ponieważ jakiś czas ssh sam ma połączenie czasowe - czasami jest to 5 lub 10 sekund, które wiedzą? - To nie jest dobre rozwiązanie dla mnie przepraszam, to musi być inne rozwiązanie !!! –

+0

W każdym razie nie jest to dobry pomysł, ponieważ moja aplikacja musi działać szybko, bez żadnych opóźnień ze skryptu oczekujacego. –

+0

Dodaję ciąg exp_continue podczas wyświetlania tutaj, ale nadal jest zablokowany. –

0

Możesz użyć modułu pexpect dla Pythona to zrobić, ponieważ może zapewnić Państwu coś jak przypadku :)

Aby uzyskać więcej informacji, zobacz: http://linux.byexamples.com/archives/346/python-how-to-access-ssh-with-pexpect/

+0

thx felix sun, ale wolę najpierw rozwiązać to w oczekiwaniu, ponieważ mam dużo skryptów w moim Skrypt powłoki, więc nie chcę poświęcać czasu na przetłumaczenie go na pylon, ale twój pomysł jest dobry dla nowego scratch cod –

7

Kiedy spawnujesz SSH, wykonaj następujące czynności:

spawn ssh -o "StrictHostKeyChecking no" "$user\@ip" 
Powiązane problemy