Shell Script muss ssh bei Passwd Abfrage abbrechen

atomrofler

Lt. Commander
Registriert
Mai 2005
Beiträge
1.358
Hallo zusammen,

ich will per shell Script prüfen, ob ich eine ssh Verbindung von einem zum anderen Server aufbauen kann. Normalerweise funktioniert die Verbindung immer, weil auf dem Zielhost in der /root/.ssh/authorized_keys der Key eingetragen ist. Aber in einigen Fällen funktioniert es halt nicht, weil die Key Datei während einer Server Migration überschrieben wird.

Was ich will:

ssh servername "ls -l"

Einfach nur gucken, ob der Befehl durchgeht. Wenn nicht, kommt logischerweise ohne Key die Passwort Abfrage. Und wenn genau dieser Fall eintritt, soll das Shell Script den Login versuch abbrechen und mit dem Rest des Shell Script weitermachen. Ich bin auf dem "trap" Befehl gestoßen, aber scheinbar hab ich grad was am Kopf. :rolleyes:

Wer hat eine Idee?

Grüße
 
Hm,
das scheint ja eine größere Herausforderung zu sein als ich dachte.
Ich hoffe noch auf die ein oder andere Idee. :-)

Grüße
 
vielleicht solltest du eher anfangen auf dem zielhost die keys zu kontrollieren anstatt so ne sinnfreie authentifizierung zu starten.
 
Ob diese Funktion sinnfrei ist oder nicht, kannst du nicht bewerten, weil du die Gegebenheiten nicht kennst. Deine Aussage hilft hier niemanden, und um es in deinen Worten auszudrücken ... Deine Aussage ist völlig sinnfrei.
 
Wo ist das Problem, den Key manuell einzutragen?
 
Erstmal sorry für meinen letzten Beitrag. War wohl etwas überreagiert. Komm grad von der Arbeit und lese dann sowas. Sorry.

Zum Problem:
Wir testen Installation von Linux-Servern. Wir haben hier ca. 40 verschiedene Server Modelle stehen. Diese Maschinen werden oftmals komplett neu installiert, teilweise auch migriert. Bei jeder Neuinstallation oder Migration werden die Keys auf den Servern überschrieben. (Und das ist auch richtig so!)

Für diverse Test muss ich ssh Befehle auf den Servern absetzen, um Statistiken erstellen zu können und um kleinere Änderungen vorzunehmen.
Der Punkt ist, dass durch das häufige neuinstallieren und migrieren die Keys nicht immer gleich danach auf die Maschinen gebracht werden kann. Jetzt will ich halt mit einem einfachen ssh conntect testen, ob ein Key da ist oder nicht. Und genau das Ergebnis schreibe ich mir in ein Log. So kann ich einfach ins Log gucken und sehe, auf welchen Servern der Key liegt und wo nicht. Dann kann ich gezielt an die Server gehen und den Key ergänzen.

Grüße und nochmal sorry.

Update: ssh mit "&" im Hintergrund zu starten geht nicht, weil eine Eingabe erwartet wird. So hätte man sich den Prozess rauspicken und killen können. :(
 
Zuletzt bearbeitet:
Ich hab in der Manpage mal geschaut, ob man die Login-Abfrage zeitlich beschränken kann. Wenn zB nach 10 Sekunden der Login abbricht (weil kein Key gefunden wurde / kein Passwort eingegeben wurde), dann liefert ssh ja einen Fehlercode zurück und beendet sich.

Du kannst ja nochmal schauen, aber ich habe da nichts in der Hinsicht gefunden (merkwürdig eigentlich).


Ah ich hab's doch gefunden. Man muss es bei sshd einstellen. Der Parameter ist -g und liegt default bei 120 Sekunden.
zB sshd -g 10

Wenn du das in ein Skript einbaust, weißt du nach spätestens 10 Sekunden pro Server, ob der passende Key eingetragen sit, oder nicht.

Alternativ wird konsequent bei jeder Migration und Neuinstallation auf fehlende Keys überprüft. Sozusagen als Teil einer Checklist.
 
Hallo,

keine schlechte Idee, funktioniert nur aber leider nicht. Die Passwortabfrage kommt, bricht aber nicht ab. :(
 
Manchmal hat man einfach ein Brett vorm Kopf.
ssh adresse & sleep 4

Nach 4 Sekunden bricht er dann ab. :-)
Danke trotzdem.

Grüße

Update: MH wohl doch nicht ..
 
Zuletzt bearbeitet:
MH? Was ist das?
 
Ein nachdenkliches mhh ... :)
Ich brauche den Returncode vom ssh Befehl. Den muss ich da noch einbauen.
Problem: Brett vorm Kopf hält an ... :-D
 
Alles außer 1 (= True) bedeutet Fehler ;)
 
Jaaa,
aber ich bekomme logischerweise nicht den Returncode vom ssh Befehl, sondern vom sleep zurück. Der bringt mir nur nix. :D
 
ssh adresse > Datei.log & sleep 4

Spuckt das einen Code aus? Auch mal mit ">>" probieren.
 
Datei ist leer. Habe im Moment keine Zeit, werde ich mir heute Abend nochmal vornehmen. Muss eigentlich nur im Befehl $? in eine eigene Variable schreiben.
 
Ahh, du hast mir die Lösung doch gegeben. Nicht so schön wie ich eigentlich wollte, aber es funktioniert.
Mein Ziel war ja, ein "ssh host "ls -l" auszuführen. Die Ausgabe von "ls -l" wird in eine Datei geschrieben. Funktioniert der Befehl nicht, bleibt die Datei leer.Somit kann ich prüfen, ob die Datei gefüllt ist, oder eben nicht.
Wenn gefüllt -> Returncode gleich 0
Wenn nicht gefüllt -> Returncode ungleich 0

Danköö &
Grüße
 
Probier doch mal
Code:
ssh -o 'AllowedAuthentications publickey'
Das sollte sofort einen Fehler werfen, wenn der Login mittels PublicKey nicht funktioniert und dann die Passwort Abfrage käme.
 
Wunderbar, bei Suse heisst der Befehl nur anders. Aber es funzt.
ssh -o 'PubkeyAuthentication=no'

Vielen Danke. Einfacher als ich dachte. :-)

Grüße
 
Zurück
Oben