Automatisierung von SSH-Logins mit Expect Script: Eine umfassende Anleitung

Die Verwaltung mehrerer Linux/Unix-Server erfordert oft den Umgang mit verschiedenen SSH-Anmeldeinformationen, darunter Benutzerkonten und Superuser-(SU)-Passwörter. Diese Daten manuell einzugeben, kann schnell mühsam werden, besonders wenn die Anzahl der Server wächst. Zum Glück bietet das Expect-Scripting-Werkzeug eine effiziente Lösung zur Automatisierung dieses Prozesses. In dieser Anleitung erfahren Sie, wie Sie Expect-Skripte nutzen können, um sich bei SSH-Servern anzumelden, in den Superuser-Modus zu wechseln und Befehle nahtlos auszuführen.

Was ist ein Expect Script?

Expect ist ein leistungsstarkes Werkzeug zur Automatisierung von Interaktionen mit terminalbasierten Anwendungen. Es analysiert die Terminalausgabe, sucht nach bestimmten Mustern (Reguläre Ausdrücke) und reagiert mit vordefinierten Eingaben. Wie der Name schon sagt, „erwartet“ es bestimmte Ausgaben und handelt entsprechend.

Beispiel für ein Expect Script

Nachfolgend ein Beispiel für ein Expect-Skript, das sich bei einem SSH-Server anmeldet, in ein Superuser-Konto wechselt und einen Befehl ausführt:

 #!/usr/bin/expect # Usage: sshsudologin.expect      set timeout 60 spawn ssh [lindex $argv 1]@[lindex $argv 0] expect "yes/no" { send "yes\r" expect "*?assword" { send "[lindex $argv 2]\r" } } "*?assword" { send "[lindex $argv 2]\r" } expect "# " { send "su - [lindex $argv 3]\r" } expect ": " { send "[lindex $argv 4]\r" } expect "# " { send "ls -ltr\r" } interact

Das Skript verstehen

Das Skript beginnt mit der #!/usr/bin/expect-Zeile, die den Einsatz des Expect-Interpreters angibt. Standardmäßig läuft ein Expect-Skript nach 10 Sekunden ab. Durch das Setzen eines Timeouts auf 60 Sekunden wird ein reibungsloser Ablauf gewährleistet, selbst wenn Serverantworten verzögert sind. Der expect-Befehl durchsucht die Terminalausgabe nach spezifischen Ausgaben wie „yes/no“-Abfragen oder Passwortaufforderungen. Das Skript reagiert dynamisch auf solche Szenarien.

Server-Prompts können variieren (z. B. „#“, „$“). Stellen Sie sicher, dass die regulären Ausdrücke des Skripts mit Ihrer Serverkonfiguration übereinstimmen. Expect-Skripte können auch nach der Anmeldung Befehle ausführen, in diesem Fall ls -ltr, nachdem Superuser-Zugriff erlangt wurde.

Beispiel für die Nutzung

Hier ist ein Beispiel für das Ausführen des Skripts mit den entsprechenden Argumenten:

 $ /path/to/sshloginsudo.expect 'yourserver.com' 'ssh_user' 'ssh_password' 'su_user' 'su_password'

Das Skript automatisiert die SSH-Anmeldung, den Wechsel zum angegebenen SU-Benutzer und die Ausführung des Befehls ls -ltr, um den Inhalt eines Verzeichnisses aufzulisten.

Tipps für effiziente Nutzung

Um wiederholte Logins zu vereinfachen, können Sie Aliase für spezifische Befehle erstellen. Zum Beispiel:

 alias myserver="/path/to/sshloginsudo.expect 'yourserver.com' 'ssh_user' 'ssh_password' 'su_user' 'su_password'"

Es wird empfohlen, Argumente, insbesondere Passwörter, in einfachen Anführungszeichen zu übergeben, da diese Sonderzeichen enthalten können, die unerwartetes Verhalten verursachen könnten.

Fazit

Expect-Skripte sind ein einfaches, aber effektives Werkzeug zur Automatisierung von SSH-Logins und anderen terminalbasierten Aufgaben. Durch die Integration von regulären Ausdrücken und automatisierten Antworten können diese Skripte Ihnen wertvolle Zeit und Mühe sparen. Ob Sie einen oder viele Server verwalten – mit Expect sorgen Sie für einen reibungslosen Workflow.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: