Ich habe die Weiterleitung von SSH- und Router-Ports eingerichtet, damit ich SSH in einen Computer in meinem Heimnetzwerk einbinden kann, wenn ich nicht zu Hause bin. Derzeit habe ich zwei Einträge in meiner .ssh/config
Datei, einen für den Fall, dass ich in meinem Heimnetzwerk bin, und einen für den Fall, dass ich nicht in meinem Heimnetzwerk bin:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
Das funktioniert, aber ich frage mich, ob ich es mir leichter machen kann. Ich hatte gehofft, dass es eine Möglichkeit gibt, mehrere HostName-Einträge so aufzulisten, dass wenn der erste fehlschlägt, er auf den zweiten zurückfällt:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Damit zuerst versucht wird, eine Verbindung zu einem Host in meinem lokalen Netzwerk herzustellen, und wenn dies nicht vorhanden ist, wird versucht, eine Verbindung mit meinem dynamischen Hostnamen ohne IP-Adresse herzustellen. Ich habe versucht, zwei Hostnamen einzugeben, aber ssh mycomputer
nur Blöcke ausgeführt, die nichts bewirken .
Ich habe die Kennwortauthentifizierung zugunsten von Schlüsseln deaktiviert, sodass eine versehentliche Verbindung mit einem Computer im lokalen Netzwerk, wenn ich nicht in meinem Heimnetzwerk bin, nicht riskieren sollte, dass mein Kennwort irgendwohin geht, wo es nicht sein sollte.
Ist es möglich, Fallback-Hostnamen anzugeben, um zu versuchen, ob der erste nicht funktioniert?
.ssh/config
kann das Skripte für bestimmte Eigenschaften ausführen. Ich weiß, dass Sie mit ProxyCommand können. Sie können etwas tun, wie in diesen Fragen und Antworten von SF - serverfault.com/questions/401233/… gezeigt .Antworten:
Es ist hässlich, aber ich denke, Sie könnten es tun, indem Sie das
exec
Kriterium verwenden,Match
um den Ausgangsstatus eines Portklopfens zu ermitteln, zBeachten Sie, dass dies nicht wirklich erkennen kann, ob Sie sich in "Ihrem" Heimnetzwerk befinden - nur, dass Sie sich in einem privaten LAN-Segment mit demselben Adressbereich befinden, in dem ein Dienst zufällig dieselbe Adresse / denselben Port überwacht.
quelle
-w 1
odernc
schien ewig zu warten. Was einfacher sein könnte, ist das zweite Match,Match exec "true"
denn wenn das erste Match fehlgeschlagen ist, versuchen Sie einfach blind die zweite Wahl.Match
hat keineElse
)ssh xyz.com
meineMatch exec "true"
gefangen , dass und umgeleitet mich in meinem Home - Server meine Remote - Host - Name verwendet wird . Ich werde es mit Ihrem Manager versuchen, aber ich denke, dass das Gleiche passieren wird.Match exec... Match !exec
wenn Sie Ihre verwenden, wird ssh'ing an andere Domänen gesendet,Match !exec
um den Hostnamen auszulösen und neu zu schreiben.~/.ssh/config
Einrückungen nicht weniger wichtig sind. Bestimmte Befehle setzen den Bereich zurück, dh in jeder neuen Host-Zeile heißt es: "Vorherige Zeilen waren für den vorherigen Host, die folgenden Zeilen gelten für diesen neuen Host." Es stellt sich heraus, dassMatch
Host die gleiche Leistung zum Zurücksetzen des Bereichs hat wie Host. Um dies zu berücksichtigen, habe ich meine Host-Leitung durchMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"
alle benutzerdefinierten Werte für mein lokales Netzwerk ersetzt und diese definiert. Ich habe dann eine passende Zeile!exec
hinzugefügt und alle Werte hinzugefügt, wenn ich nicht im Netzwerk bin. Jetzt funktioniert es gut für alle Hosts.Ich benutze so.
ssh_config hat so etwas wie einen Einrückungsblock nicht. Wenn Sie den Übereinstimmungssatz auf einen bestimmten Host beschränken möchten, sollten Sie die vollständige Bedingung beschreiben.
Sie können langes Warten vermeiden,
nc
indem Sie-G 1
die Option (Verbindungszeitlimit 1s) angeben, und Sie können das folgende Verhalten verwenden, um das mehrfache Aufrufen von zu vermeidennc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
quelle
Nein; Wenn Sie mehrere
HostName
s für einenHost
Eintrag angeben , wird nur der erste bestätigt:quelle
ssh mycomputer
, sollte es ziemlich eindeutig sein, mit welchem Computer ich mich verbinde.