Muszę napisać skrypt, który będzie działał na komputerze z Centos 7 i łączy się z innym komputerem z Centos 7 używając ssh, wykonaj polecenie konsoli, na przykład „ls -la” i zapisz wynik do pliku, aby móc później przeanalizować te dane wyjściowe.

Napisałem następujący skrypt EXPECT:

ssh_connection.exp:

#!/usr/bin/expect -f set timeout 120 spawn ssh [email protected] expect "assword:" send "PASSWORD\r" expect "prompt#" sleep 5 puts "Executing ls -la" send "ls -la\r" sleep 10 puts "Executing ps -af" puts "ps -af\r" sleep 10 puts "Closing the ssh session\r" send "exit\r" 

Ten skrypt prawidłowo łączy się przez ssh z maszyną o IP = 129.0.0.10 i wyświetla na ekranie komunikaty który pojawia się na „puts”: Wykonywanie ls -la Wykonywanie ps -af Zamykanie sesji ssh

Jednak nie pokazuje wyniku wykonania poleceń, które wysyłam za pomocą send:

ls -la ps -af 

Co jest nie tak z tym skryptem?

Jak mogę zapisać dane wyjściowe poprzednich poleceń w pliku, aby móc je później przeanalizować za pomocą basha skrypt czy program w C?

Komentarze

  • Po prostu użyj sta ndard ssh polecenie z kluczami ssh i heredocem
  • Wygląda na to, że zbytnio komplikujesz rzeczy. Nie musisz używać funkcji oczekiwać do automatyzacji rzeczy przez ssh.
  • czy próbowałeś użyć polecenia takiego jak spawn ssh [email protected] ls -la>Ls?
  • Uruchom skrypt za pomocą expect -d ssh_connection.exp i zobacz, gdzie są problemy. Pierwszą rzeczą, którą ' d polecam, jest zamiana wszystkich uśpień na expect "prompt#"

Odpowiedz

Nie musisz używać do tego celu expect. ssh może pobierać dodatkowe argumenty poleceń, które chcesz uruchomić przez połączenie SSH.

Krok # 1

Skonfiguruj parę kluczy SSH (google it), a następnie skopiuj SSH do zdalnego serwera. W tym celu zalecam użycie ssh-copy-id. Zobacz moją odpowiedź na to U & LQ & Tytuł: Jak prawidłowo kopiować klucze prywatne ze zdalnych serwerów do mojej lokalnej maszyny, dzięki czemu mogę połączyć się za pomocą ssh .

Krok # 2

Teraz z możliwością SSH do serwera w miejscu za pomocą klucza , twój powyższy problem zamienia się w ten:

$ ssh [email protected] "ls -la; ps -af" 

Możesz uzyskać wymyślny i użyć dokumentów (heredocs aka . here-docs) w celu dalszego ulepszenia tej techniki.

$ ssh [email protected] <<EOF > ls -la > ps -af > EOF 

lub umieść polecenia w pliku i przekaż je do ssh:

$ ssh [email protected] < my.cmds 

Komentarze

Odpowiedź

Dzięki,

Zmodyfikowałem swój skrypt, zastępując wiersz:

spawn ssh [email protected]

z tym innym, jak mi powiedziałeś:

spawn ssh [email protected] „ls -la; ps -af”

Teraz widzę wyjście poleceń na ekranie i mogę przekierować do pliku.

Następnie próbowałem dostosować ten skrypt do wykonywania polecenia na innej maszynie, która jest przełącznikiem podobnym do Cisco (nie jest to Cisco, ale jest kompatybilny).

Skrypt, za pomocą którego łączę się z przełącznikiem za pomocą ssh, to:

** #! / usr / bin / Expect -f

set timeout 120

spawn ssh [email protected] „show vlan 500”

oczekuj „assword:”

wyślij „PASSWORD \ r”

oczekuj „zachęty” # „

sleep 5

wstawia” Zamykanie sesji ssh \ r „

send” exit \ r „**

To nie działa na przełączniku i pojawia się ten błąd:

spawn ssh [email protected] show vlan 501

[email protected] „s hasło:

imish: invalid option -” c „

Spróbuj` imish –help „, aby uzyskać więcej informacji informacje.

send: spawn id exp6 not open

while executing 

„send” exit \ r „”

(file "./ssh_script_v3.exp" line 7) 

Muszę więc użyć skryptu oczekiwania, który wyśle polecenie za pomocą polecenia „send”:

! / usr / bin / Expect

spawn ssh [email protected]

oczekuj „assword:”

wyślij „user \ r”

oczekuj „>”

uśpienie 5

wyślij „sh vlan 500 \ r”

uśpienie 5

wyślij „wyjście \ r”

Teraz nie pojawia się żaden błąd, ale nic nie jest wyświetlane na ekranie.

Czytałem, że to dzieje się, ponieważ systemy Linux i UNIX automatycznie buforują swoje dane wyjściowe, gdy działają w trybie nieinteraktywnym. Myślę, że Expect może sprawić, że programy będą myśleć, że działają interaktywnie za pomocą „unbuffer”, ale nie wiem, jak używać „unbuffer” z „send”. Moje próby, aby to zrobić, nie działają.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *