Ich habe meine ~/.ssh/config
mit verschiedenen Hosts konfiguriert, auf die entweder über unser Firmen-VPN oder über einen SSH-Proxyserver zugegriffen werden kann.
Im Moment habe ich nur
Host internal-server
ProxyCommand ssh -W internal.ip:22 external-server
Wenn ich mich jedoch im internen Netzwerk befinde, kann ich direkt auf die interne IP-Adresse zugreifen. Durch das Proxying über den externen Server wird die Verbindungsherstellung lediglich verzögert.
Gibt es eine Möglichkeit, einen vorläufigen Proxy für den Fall, dass die interne IP nicht erreichbar ist, und eine direkte Verbindung herzustellen, wenn dies nicht der Fall ist?
%
Charakter hat nichts Besonderes . Man könnte wirklich alles gebrauchen. Der Prozentwert wird verwendet, da er in einem Hostnamen oder Benutzernamen nicht gültig ist. Dercut
Befehl mit dem ProxyCommand verwendet den%
als Begrenzer, um den Hostnamen abzurufen .ssh targetH
, was Ziel von zu Hause bedeutet . Wenn in einem lokalen Netzwerk zu zielen, einfachssh target
. Es wäre schön gewesen, wenn dies in der Antwort klarer formuliert worden wäre.Ich benutze eine andere Methode mit Match. In meinem Fall möchte ich einen lokalen Proxy verwenden, wenn dieser ausgeführt wird oder nicht. Die folgende Direktive erfüllt dies in netter Weise:
Es stimmt mit jedem SSH-Versuch überein und führt eine schnelle Überprüfung durch,
nc
um festzustellen, ob mein Proxy unter 1086 aktiv ist (in diesem Fall wird esnc
ohne Fehler beendet). In diesem Fall wird der ProxyCommand festgelegt.quelle
Vor einem Jahrzehnt habe ich einen Proxy-Befehl für diese Art von Szenario geschrieben. In Ihrem Anwendungsfall könnte mein Proxy-Befehl folgendermaßen lauten:
Ein paar Vorbehalte: Es ist mir etwas peinlich zuzugeben, dass IPv6 nicht unterstützt wird und dass nur eine einzige IP-Adresse pro Hostname verwendet wird. Außerdem wird das Client-Banner erst dann auf den Server übertragen, wenn das Server-Banner gesendet wurde. Aber es ist unwahrscheinlich, dass dies zu Problemen führt.
quelle
Vielen Dank für @ till's Answer , es hat mich sehr inspiriert.
Ich habe festgestellt, dass Sie Ihre Verbindung zwangsweise umleiten können
ProxyCommand nc dst dst-port
.Beispielsweise stellen Sie tatsächlich eine Verbindung her,
B.com
wenn Sie verwendenWerde
UserKnownHostsFile
aber trotzdem aufnehmen wieA.com
So können Sie Ihrer Domain "auto" hinzufügen
ssh_config
Ich ersetzte
nc -w 1 %h %p
mit(timeout 0.1 nc -z %h %p) && nc %h %p
, es ist schneller, wenn Sie den internen Server weniger als 100ms erreichen könnten.Sie können auch durch ersetzt werden
ping
, dies kann jedoch auf fehlerhafte Informationen hinweisen, wenn Sie einen TCP-basierten Proxy verwendenproxychains
oder der Server kein ICMP-Echo zulässt.Sie können durch
(timeout 0.1 nc -z %h %p)
alles ersetzen , was erkennt, ob Sie sich auf einem internen Server befinden.Wenn Sie mehrere Kandidaten-IPs haben, können Sie dies auch verwenden:
Es wird versucht, eine Verbindung herzustellen
1.1.1.1
, wenn dies fehlschlägt, versuchen Sie, eine Verbindung herzustellen2.2.2.2
, und dann3.3.3.3
.quelle
Dies funktioniert etwas automatischer mit einer geringfügigen zusätzlichen Verzögerung von 1 Sekunde, wenn Sie sich nicht hinter der Firewall befinden und die Firewall Folgendes nicht ablehnt:
quelle
Normalerweise würde ich einen anderen Eintrag wie diesen erstellen.
Rufen Sie dann einfach die gewünschte auf, abhängig von Ihrer aktuellen Proxy-Umgebung.
quelle