
Ich habe einen Laptop, der sich zeitweise natürlich innerhalb oder außerhalb meines Heimnetzwerks befinden kann. Wenn ich mich per SSH mit einem Rechner innerhalb meines Netzwerks verbinden muss, ist die Verbindung ziemlich unkompliziert:
localhost $ ssh machinelearning
Wenn ich versuche, auf die Maschine zuzugreifen vondraußenmeines Netzwerks muss ich mich dann mit meinem Router verbinden und von dort aus per SSH kommunizieren:
localhost $ ssh router.mytotallyuniquedomain.com
router $ ssh machinelearning
Ich erinnere mich, dass es für die Ausführung des letztgenannten Befehls eine Tastenkombination gab ~/.ssh/config
, kann mich aber im Moment nicht erinnern, welche es ist.
Gibt es für mich eine Möglichkeit, mehrere Hostnamen oder Verbindungstypen anzugeben, sodass in diesem Fall Folgendes geschieht:
$ ssh machinelearning
SSH versucht zunächst, eine Verbindung zum machinelearning
Host im lokalen Netzwerk herzustellen und dann, sich durch zu tunneln router.mytotallyuniquedomain.com
, und das alles, ohne dass ich den langen Hostnamen eintippen muss?
Antwort1
Methode Nr. 1 - ProxyCommand & netcat
Um dies zu ermöglichen , verwende ich in meinem dieses Setup $HOME/.ssh/config
:
Host intserver1-o intserver2-o intserver3-o
ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p
Ich kann dann ssh intserver2-o
von überall auf diesen internen Server zugreifen. Wenn ich zu Hause im LAN bin, verwende ich ssh intserver1
.
NOTIZ:Für den obigen Trick ist nc
die Installation von netcat() auf dem Extserver1 erforderlich.
Methode Nr. 2 - verschachteltes SSH
Alternativ können Sie auch diese Methode verwenden:
$ ssh -t -l gatewayuser gatewayserver "ssh -l serveruser internalserver"
Mit dieser Methode verschachteln Sie grundsätzlich SSH-Aufrufe.
Methode Nr. 3 - ProxyCommand & ssh -W
Bei neueren SSH-Versionen (5.4+) können Sie ssh
stattdessen nc
den -W
Switch verwenden.
Host TARGETHOST
ProxyCommand ssh -W %h:%p PROXYHOST
Die %h
& %p
sind Makros für den Hostnamen-Port, die für verwendet wurden TARGETHOST
.