Tunneln Sie eine SSH-Verbindung mit einem einzigen Befehl über eine Zwischenmaschine

9

Gibt es eine Möglichkeit, mit einem einzigen Befehl eine SSH-Verbindung von meinem Computer A über Computer B zu Computer C herzustellen, sodass ich Zugriff auf die Shell auf Computer C habe?

Eine Falte (die anscheinend das einfache Weiterleiten der SSH-Verbindung mit der Option -L ausschließt) ist, dass ich das Kennwort für das Konto auf Computer B habe und das Konto auf Computer B berechtigt ist, eine Verbindung mit dem Konto auf Computer C herzustellen, aber Ich habe kein Passwort für das Konto auf Computer C.

geistige Gesundheit
quelle

Antworten:

8

Ich habe verstanden, dass Sie sich nur am Computer C anmelden und nichts von A nach C tunneln möchten. Dies sollte also den Trick tun:

ssh -t computer-b "ssh computer-c"

Möglicherweise müssen Sie Kennwörter zweimal eingeben, zuerst für Computer B und dann für Computer C, aber dies kann durch Verwendung der Schlüsselpaarauthentifizierung von ssh vermieden werden.

af.
quelle
1
Danke - es funktioniert! Wenn ich so mutig sein darf, um ein Follow-up zu bitten. Irgendwelche Ideen, wie ich eine Datei mit einem einzigen Befehl von A nach C scp kann?
Vernunft
Das ist ein bisschen schwierig. Dies kann durch Hinzufügen von Teer zum Mix erfolgen. Wenn es sich jedoch nur um eine Datei handelt und Computer B über ausreichend Speicherplatz verfügt, um sie eine Weile zu speichern, ist es viel einfacher, sie in zwei Schritten zu kopieren.
af.
Sie können dies auch dreimal tun! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak
0

Sie möchten wahrscheinlich den ProxyCommand von SSH verwenden: http://benno.id.au/blog/2006/06/08/ssh_proxy_command

Rory
quelle
Ich kann keinen Weg finden, dies zum Laufen zu bringen, da ich das Kennwort für Computer C nicht habe und dieser Ansatz dies anscheinend erfordert. Offen für Vorschläge, da dieser Ansatz eleganter erscheint.
Vernunft
0

Wenn Sie SSH-Schlüssel verwenden, können Sie einen neuen Schlüssel für Computer B generieren und diesen für die Verbindung von A nach B verwenden. Auf Computer B können Sie einen hinzufügen

command="ssh C" ssh-....

in der ~/.ssh/authorized_keysDatei. Das heißt, wenn Sie mit dieser SSH-Taste eine Verbindung zu B herstellen, wird der ssh CBefehl ausgeführt.

Ich weiß nicht, ob das mit scp funktioniert.

Rory
quelle
0

Benutzen ProxyCommand

Siehe man ssh_config. Ich empfehle, davon Gebrauch zu machen ProxyCommand. Nehmen wir Ihr ursprüngliches Szenario:

  • Computer A (Ihr Computer)
  • Computer B (ein Proxy-Hostname)
  • Computer C (nur über SSH von Computer B aus erreichbar)

Bearbeiten Sie ~/.ssh/configmit den folgenden Inhalten.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Jetzt können Sie Computer C transparent erreichen

ssh computerc

Vorteile dieser Methode

Sicherer

Sie benötigen nur Ihren privaten Schlüssel, um sich auf Computer A (Ihrem Computer) zu befinden. Der ncBefehl fungiert als Proxy, in dem SSH den Datenverkehr verschlüsselt. Dies beinhaltet die Authentifizierung. Es ist eine sehr schlechte Idee, Ihren privaten Schlüssel auf mehrere Server zu verteilen (da jeder gefährdete Server mit Ihrem privaten Schlüssel letztendlich Ihren privaten Schlüssel gefährdet).

Entspricht mehreren Zielen

Man kann mehrere Zielcomputer mit abgleichen Host. Ein einzelner Computer oder ein beliebiger Computer innerhalb eines bestimmten Netzwerks (z. B. 192.168.35.0/24im obigen Beispiel) als Proxy über Computer B. Er dient auch als Alias.

ssh 192.168.35.27

Im obigen Beispiel wird ein Proxy über Computer B ausgeführt, um zur IP-Adresse zu gelangen.

Daisy-Chain-Proxys

Mit dieser Methode können Sie so viele automatische Proxys wie nötig verketten. Sie können beispielsweise einen Computer D hinzufügen, der nur von Computer C aus erreichbar ist und transparent funktioniert.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdIn den obigen ssh_configBeispielen wird automatisch ein Proxy über Computer C und Computer B ausgeführt .

Sam Gleske
quelle
Ich verwende ProxyJump anstelle von ProxyCommand und es funktioniert gut. Es scheint, dass es jetzt mehr Optionen gibt.
Fgiraldeau