Es scheint, als gäbe es eine kleine Diskrepanz zwischen dem Verhalten des SSH-Agenten für zwei von mir konfigurierte Konten.
Ich habe ein einfaches Überwachungsskript geschrieben, um die Verfügbarkeit einiger bei uns laufender VMs zu prüfen. Ich habe alle Tests und Fehlerbehebungen mit meinem Hauptzugriffskonto durchgeführt. Dabei habe ich ein SSH-Schlüsselpaar generiert, den SSH-Agenten gestartet und die Identität zum Agenten hinzugefügt, damit das Skript SSH ohne Kennwort verwenden kann.
Jetzt möchte ich dieses Skript als Benutzer eines Dienstkontos ausführen. Ich habe das Dienstkonto erstellt und zum Generieren der Schlüssel die Anmeldeshell vorübergehend auf /bin/bash eingestellt. Ich habe meine Schlüssel generiert, die Passphrase entfernt und die Identität dem Agenten hinzugefügt.
Die Diskrepanz scheint darin zu liegen, wie die Shell eine Verbindung zum Agenten herstellt. In meinem Benutzerkonto musste ich den Agenten seit Beginn der Tests (ungefähr zwei Wochen) nicht neu starten. Aber wenn ich versuche, das Skript unter dem Dienstkonto auszuführen, muss ich den Agenten anscheinend jedes Mal neu starten, die Identität hinzufügen und dann die Arbeit ausführen.
Im Idealfall soll der Agent unbegrenzt laufen und das Servicekonto soll sich automatisch wieder damit verbinden, wenn das Skript ausgeführt wird, sodass ich keine Prozesse innerhalb des Skripts verwalten muss. Ich habe mir die Konfigurationen der einzelnen Konten angesehen und kann keine Unterschiede feststellen. Für jede Einsicht wäre ich sehr dankbar.
**Bearbeiten: Ich habe vergessen darauf hinzuweisen, dass der Agent zwar kontinuierlich ausgeführt wird, die Shell-Prozesse für das Dienstkonto ihn jedoch anscheinend nicht verwenden und ein neuer gestartet werden muss:
ovmmon 14043 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
ovmmon 14952 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
Antwort1
Hier passiert eines von zwei Dingen:
- Der SSH-Agent wird tatsächlich geschlossen, wenn Sie sich abmelden
- Der SSH-Agent läuft noch, aber Sie verlieren die Informationen über seine PID und Pipe
Sie können überprüfen, was der Fall ist, indem Sie „ps -ef“ ausführen und nach „ssh-agent“ suchen.
Wenn der SSH-Agent nicht mehr funktioniert, müssen Sie ihn irgendwie am Leben erhalten. Hier sind drei Möglichkeiten:
- Sie können den SSH-Agenten beim Booten des Servers über ein Startskript starten und die Ausgabe in eine Datei ausgeben (mit den entsprechenden Zugriffsrechten, um Missbrauch zu verhindern). Wenn Sie den Schlüssel passwortlos machen, können Sie den Schlüssel auch über das Skript hinzufügen. (Der letzte Teil ist natürlich nur ratsam, wenn das Konto, mit dem Sie sich verbinden, sehr eingeschränkte Rechte auf dem Remote-Server hat.) Lassen Sie dann Ihr Skript die SSH-Agenteninformationen aus der beim Start erstellten Datei lesen.
- Verwenden Sie den Bildschirm, wenn Sie sich beim Dienstkonto anmelden; trennen Sie dann die Bildschirmsitzung, nachdem Sie den Agenten gestartet haben.
- Verwenden Sie nohup, wenn Sie den Agenten starten.
Wenn der SSH-Agent nicht tot ist, Sie aber die Umgebungsinformationen verloren haben, stellen Sie sicher, dass er beim Start seine Umgebungsvariablen in eine bestimmte Datei schreibt. Lassen Sie diese Datei dann beim Anmelden von Ihrer Shell als Quelle verwenden.
Antwort2
Wenn Sie eine Sub-Shell-Aufrufmethode verwenden, wird der SSH-Agent beim Abmelden von der Shell beendet. Wenn Sie die Eval-Methode verwenden, wird die Shell weiter ausgeführt, bis sie manuell beendet wird.
Sehen:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm
Speziell:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm#ch06-50031.html
Außerdem weiß ich, dass es beim Ausführen von Cron mit ENV-Variablen zu Problemen kommen kann. Das ist also ein weiterer zu überprüfender Bereich.