Perl, SSH und Cisco

Diskutiere mit über: Perl, SSH und Cisco im Mac OS X Entwickler, Programmierer Forum

  1. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Hallo zusammen,

    ich möchte gerne einige Perskripte zur Fernwartung meines Cisco-Routers über eine SSH-Verbindung schreiben.
    Dazu habe ich zunächst mal das Modul "Net::SSH::perl" installiert und dann versucht mich schrittweise an die Lösung heranzuarbeiten.

    Das Ausführen von Kommandos auf SSH-Servern (2.ter Mac, Cisco Router) funktioniert problemlos.
    Was nicht funktioniert ist das Ausführen von Kommandos, die eine interaktive Kommunikation erfordern.

    Unter http://search.cpan.org/src/DROLSKY/Net-SSH-Perl-1.25/eg/remoteinteract.pl gibt es ein Beispielskript, das eine Lösung anhand des Kommandos "passwd" demonstrieren soll.
    Trotz intensiver Bemühungen ist es mir nicht gelungen, das Skript (die notwendigen Anpassungen habe ich natürlich vorgenommen) erfolgreich auszuführen.
    Getestet habe ich das mit zwei Macs (10.3.7).

    Hier die Änderungen, die ich durchgeführt habe (mit Zeilennummern):
    Und hier die Augabe (gekürzt)
    An dieser Stelle bleibt das Skript hängen.
    Ich schließe daraus, dass die Übertragung des Kommandos (passwd) und der Empfang der Serverantwort (Changing password for martin. \nOld password:) funktionieren
    Der Code wird bis Zeile 74 ordnungsgemäß abgearbeitet.
    Ich vermute, dass das Senden des Packets in Zeile 76/77 nicht funktioniert.

    Habe schon ziemlich lange im Netz gestöbert und leider bisher keine Lösung gefunden.
    Bin für jede Anregung dankbar.
     
    Zuletzt bearbeitet: 03.01.2005
  2. absi

    absi MacUser Mitglied

    Beiträge:
    3
    Zustimmungen:
    0
    Registriert seit:
    26.01.2005
    Ich würde das Expect-Modul benutzen und SSH als externe Anwendung aufrufen - ein ssh-client sollte ja auf dem Rechner, der es aufruft installiert sein.

    Hier ein Beispiel, was sich nach Abfrage des Passworts auf einem Rechner per SSH einlogt und den Befehl "uptime" ausführt, sobald in der Ausgabe "marvin" steht (der Rechner heisst marvin, also ist das ein Teil des Prompts)... Am Ende geht das Skript in einen interaktiven Modus, man kann also in der SSH-Session weiterarbeiten (könnte man auch durch absetzten von "exit" beenden)

    Ich weiss, daß das Beispiel sinnfrei ist, aber es zeigt eigentlich alles, was man braucht :D

    Code:
    #!/usr/bin/perl
    
    use Expect;
    use Term::ReadPassword;
    
    my $password = read_password('Password: ');
    
    my $exp = new Expect;
    $exp->slave->clone_winsize_from(\*STDIN);
    
    $exp->spawn("ssh test@10.0.0.1");
     
    if ($exp->expect(undef, 'Password')) {
            $exp->send("$password\n");
    }
    
    if ($exp->expect(undef, ' marvin ')) {
            $exp->send("uptime\n");
    }
    
    $exp->interact();
    
    
    HTH
     
  3. maceis

    maceis Thread Starter MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    Danke, ich werde das auf jeden Fall testen, obwohl die Kommunikation mit Net::SSH::perl zumindest mit anderen Computern inzwischen klappt.
    Probleme hab ich noch mit meinem Cisco-Router.
    Vielleicht kann ich die mit Expect lösen - mal seh'n
     
Die Seite wird geladen...
Ähnliche Themen - Perl SSH Cisco Forum Datum
[Perl] Programm für Funktionsgraphen funktioniert nicht richtig Mac OS X Entwickler, Programmierer 26.08.2013
Perl CPAN Module installieren nicht möglich Mac OS X Entwickler, Programmierer 08.09.2012
Installation Active Perl - Eclipse Epic Mac OS X Entwickler, Programmierer 25.09.2009
Perl: simples Backupscript Mac OS X Entwickler, Programmierer 18.08.2009
Perl - Skalar überprüfen ob es eine soundso große Zahl ist Mac OS X Entwickler, Programmierer 21.10.2008

Diese Seite empfehlen

Benutzerdefinierte Suche