Ich bin gerade dabei, ein Bash-Skript zu erstellen, das sich bei den Remotecomputern anmeldet und private und öffentliche Schlüssel erstellt.
Mein Problem ist, dass die Remote-Maschinen nicht sehr zuverlässig sind und nicht immer in Betrieb sind. Ich benötige ein Bash-Skript, das überprüft, ob die SSH-Verbindung hergestellt ist. Bevor Sie die Schlüssel für die zukünftige Verwendung erstellen.
bash
ssh
connection
Chutsu
quelle
quelle
ssh-keygen
wird ein Schlüsselpaar auf dem lokalen Computer generiert und anschließendssh-copy-id
der öffentliche Schlüssel auf Remotecomputer kopiert. Es scheint, dass Sie die Dinge anders machen. Warum, was ist dein Ziel?Antworten:
Sie können dies mit dem Rückgabewert überprüfen, den ssh Ihnen gibt:
EDIT: Ein anderer Ansatz wäre die Verwendung von nmap (Sie benötigen keine Schlüssel oder Login-Zeug):
Sie müssen die Nachricht jedoch überprüfen (nmap verwendet den Rückgabewert nicht, um anzuzeigen, ob ein Port gefiltert, geschlossen oder geöffnet wurde).
EDIT2:
Wenn Sie am aktuellen Status des SSH-Ports interessiert sind, können Sie Folgendes ersetzen
grep open
durchegrep 'open|closed|filtered'
:Nur um vollständig zu sein.
quelle
ssh
in einen ausgefallenen Host zu gelangen, erst nach einer Zeitüberschreitung von z. B. 60 Sekunden fehlschlägt - was für einige Verwendungen möglicherweise unerschwinglich ist. Wenn ein Hostname in definiert ist~/.ssh/config
,ssh
funktioniert der erste Ansatz, während der zweitenmap
Weg mit fehlschlägtFailed to resolve "<hostname>"
.$?
? etcssh -q user@downhost exit | echo $?
Pipe das Verbindungsergebnis in Echoquelle
Sie können so etwas verwenden
Dies gibt "ok" aus, wenn die SSH-Verbindung in Ordnung ist
quelle
Wenn Sie die Antwort von
@Adrià Cidre
Ihnen ergänzen , können Sie Folgendes tun:quelle
Versuchen:
quelle
Der folgende
ssh
Befehl sollte einen Exit-Code für0
eine erfolgreiche Verbindung und ansonsten einen Wert ungleich Null haben.quelle
Nur für den Fall, dass jemand nur überprüfen möchte, ob Port 22 auf einem Remotecomputer geöffnet ist, ist dieser einfache Befehl netcat hilfreich. Ich habe es benutzt, weil nmap und Telnet für mich nicht verfügbar waren. Darüber hinaus verwendet meine SSH-Konfiguration die Tastaturkennwortauthentifizierung.
Es ist eine Variante der von GUESSWHOz vorgeschlagenen Lösung.
quelle
Wenn Sie überprüfen möchten, ob ein Remote-Ordner vorhanden ist oder ein anderer Dateitest wirklich:
Vergessen Sie nicht die Anführungszeichen in
"$(ssh ...)"
.quelle
So stellen Sie eine Verbindung zu einem Server mit mehreren Schnittstellen her
quelle
Beispiel mit dem BASH 4+ -Skript:
quelle
https://onpyth.blogspot.com/2019/08/check-ping-connectivity-to-multiple-host.html
Der obige Link dient zum Erstellen eines Python-Skripts zum Überprüfen der Konnektivität. Sie können eine ähnliche Methode verwenden und Folgendes verwenden:
Befehl zum Erstellen eines Bash-Skripts.
quelle
Ich habe das Gefühl, Sie versuchen hier das falsche Problem zu lösen. Sollten Sie nicht versuchen, die SSH-Dämonen stabiler zu machen? Versuchen Sie, so etwas wie monit auszuführen , um zu überprüfen, ob der Dämon ausgeführt wird, und starten Sie ihn neu, wenn dies nicht der Fall ist (damit Sie Zeit haben, das Grundproblem hinter dem Herunterfahren von sshd zu finden). Oder ist der Netzwerkdienst problematisch? Versuchen Sie es anzuschauen
man ifup
. Mag das ganze verdammte Ding dich nur abschalten? Nun, das ist ein größeres Problem ... Sehen Sie sich Ihre Protokolle an (beginnen Sie mit Syslog), um Hardwarefehler oder Dienste zu finden, die Ihre Box herunterfahren (möglicherweise einen Temperaturmonitor?).Es ist großartig, Ihre Skripte fehlertolerant zu machen, aber Sie möchten möglicherweise auch Ihre Boxen fehlertolerant machen.
quelle