Schreiben eines Skripts zum An- und Abmelden beim SSH-Server

Schreiben eines Skripts zum An- und Abmelden beim SSH-Server

Um diese Erklärung zu geben,Maschineist mein Laptop, und ich verwende ihn, um mich mit einem Remote-Server zu verbinden - den ich alsServername.

Der Ablauf lässt sich wie folgt beschreiben:

  1. Ich verbinde mich mit dem ServerServernamemit sshvonMaschine
  2. Ich füge dann das Passwort ein fürServername
  3. Ich kompiliere etwas aufServername
  4. Ich melde mich ab vonServername(mithilfe von exit)
  5. Ich starte dann neuServernameausMaschine
  6. ICHping Servernameund dann warte ich, bis ich eine Antwort bekomme ( pingdie Ausgabe wird auf der Konsole angezeigt)
  7. Ich sshinServernamewieder
  8. Ich führe einige Kontrollen durch
  9. Schließlich exitmöchte ichServernameum zurück zu gehen zuMaschine

Um das obige Rezept zu erreichen,manuellFühren Sie die folgenden Befehle ausMaschine:

<machine>$ ssh server_name
insert password for server_name:
<server_name>$ cd /some/path/
<server_name>$ make clean > /dev/null
<server_name>$ make > /dev/null
<server_name>$ exit
<machine>$ ./my_reboot_script server_name
<machine>$ ping server_name
PING 10.23.22.7 with 56(84) bytes of data.
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
ping output... (not very interesting)...
^C
<machine>$ ssh server_name
insert password for server_name:
<server_name>$ ./run_some_checks
<server_name>$ exit
<machine>$ echo "Done!"

Ein paar Anmerkungen zu den oben genannten Punkten sind angebracht:
- my_reboot_scriptist nur ein Programm, das mir einen Kaltstart ermöglichtServernamevom Comport meines eigenen Sitzes aus.
- Nach einem KaltstartServernamemuss ich warten, bis es wieder funktioniert, damit ich mich mit wieder damit verbinden kann ssh. Dazu verwende ich ping; es dient lediglich als Hinweis darauf, wannServernameist bereit, wieder Verbindungen anzunehmen; Erst wenn ich sehe, dass die pingAusgabe endlich auf der Konsole erscheint, unterbreche ich sie mit Strg+C und gehe dann sshinServername.

Das oben genannte manuell durchzuführen ist mühsam und zeitaufwändig. Deshalb möchte ich den obigen Prozess automatisieren, aber es gibt drei Schwierigkeiten:

  1. Bei Verbindung mitServername, das Ausführen des exitBefehls aus der Shell meldet mich ordnungsgemäß ab und bringt mich zurück zuMaschine. Die Ausführung exitaus einer Skriptdatei heraus .shbeendet jedoch das Skript ...
  2. Wie kann ich das Passwort automatisieren, umServernamePhase? Ich möchte das Passwort nicht manuell eingeben, sondern es lieber dem Skript überlassen. Mit anderen Worten: Ich möchte das Passwort irgendwie im Skript fest codieren, damit es mich nicht damit belästigt.
  3. Die Phase „Warten, bis der Server für SSH-Verbindungen bereit ist“: Wie kann ich das automatisieren? Das heißt, anstatt einfach zu pingwarten, bis ich eine Antwort bekomme, und dann mit Strg+C zu unterbrechen, möchte ich, dass das Skript pingerkennt, dass eine Antwort vonServername, dann verbinden Sie sich mit ssh. Obwohl die Verwendung pinghier vielleicht keine so gute Idee ist, da die Antwort auf pingnicht garantiert, dassServernameist bereit, auf sshVerbindungen zu warten (aus meiner Erfahrung mit dem obigen Prozess dauert es noch ein paar Sekunden, nachdem die erste Antwort auf die Verbindung pingeingeht). Daher wäre es vielleicht besser, wenn das Skript sshin einer Schleife weiter versucht, den Zugriff zu gewähren (eine Art Wartemechanismus oder sogar eine Schleife, die schläft und alle paar Sekunden aufwacht, um zu versuchen, eine Verbindung herzustellen).

Antwort1

Wenn Sie die öffentlichen Schlüsseldaten von Ihrem Computer in die .ssh/authorized_keyDateien des Servers übertragen können, können Sie die Kompilierung mit einem einzigen sshAufruf pro Server ausführen, ohne jemals ein Kennwort eingeben zu müssen:

ssh someone@$SERVER 'cd /some/path/; make clean > /dev/null; make > /dev/null;'

Sie könnten das in eine Schleife in einem Shell-Skript einfügen und den Wert der Shell-Variable SERVERbei jedem Durchlauf ändern. Wenn es Ihnen nichts ausmacht, bei jedem sshAufruf Ihr Passwort einzugeben, benötigen Sie nicht einmal die öffentlichen Schlüsseldaten auf den Servern.

verwandte Informationen