Korrigieren Sie die Einstellungen der ssh-Konfigurationsdatei, um einen Tunnel zu einer dritten Maschine zu erstellen

18

Ich versuche, über einen Bridge-Server auf einen Server zu tunneln. Bisher konnte ich es mit dem folgenden Befehl über die Befehlsshell ordnungsgemäß zum Laufen bringen:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

Aber ich habe versucht, dies in meine ~/.ssh/configAkte zu packen, und ich habe Probleme. Ich habe es versucht:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

Aber wenn ich das tue, erhalte ich die folgende Fehlermeldung remoteserver.comund bin mir nicht sicher, was die Ursache ist:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: nicht gefunden

Ich weiß, dass remoteserver.commeine Shell ist , wenn ich mich anmelde /usr/bin/ksh.

Ich habe versucht, den ssh-Befehlen in der Konfigurationsdatei Pfadargumente hinzuzufügen, aber es machte keinen Unterschied.

Irgendwelche Ideen woran es liegen kann?

Eric B.
quelle
Das ist einfach nicht so ProxyCommandgemeint. Normalerweise wird es mit Netcat verwendet, bei dem ssh seine Ausgabe durch das Netzwerk leitet und Netcat als Tunnel zum SSH-Port des Remoteservers fungiert . Sie benötigen einen ProxyCommand, ssh -W %h:%p [email protected]wenn Sie diese Funktion verwenden möchten.
DanSut
Leider ist auf meinem Bridge-Server kein Netcat installiert, daher versuche ich, dies auf eine andere Weise zum Laufen zu bringen. Ich dachte, wenn es über die Befehlszeile funktionieren könnte, sollte es eine Möglichkeit geben, die Informationen in einer Konfigurationsdatei abzulegen.
Eric B.
In Ihrer Befehlszeilenverwendung, die Sie ssh -A [email protected]als Befehl zur Ausführung auf dem Bridge-Computer verwenden, bietet config keine Möglichkeit, Standardbefehle bereitzustellen. Was Sie versuchen, worksan sich zu tun , aber dann versucht ssh, IhreProxyCommand Server als Tunnel zu verwenden, und startet das Abfeuern des SSH-Protokolls dort, wo am anderen Ende eine Shell wartet, anstatt dass ein sshd auf das SSH-Protokoll wartet.
DanSut
@dansut hat super funktioniert. Danke!
Eric B.

Antworten:

23

Jakujes Antwort ist richtig, aber seit OpenSSH 7.3können Sie jetzt verwenden, -J ProxyJumpwas einfacher ist. Siehe meine Notizen:

OpenSSH 7.3oder höher

Verwenden Sie ProxyJump. Wie im Handbuch erklärt:

-J [Benutzer @] Host [: Port] Stellen Sie
eine Verbindung zum Zielhost her, indem Sie zuerst eine SSH-Verbindung zum Sprunghost herstellen und von dort aus eine TCP-Weiterleitung zum endgültigen Ziel herstellen. Mehrere Sprungsprünge können durch Komma getrennt angegeben werden. Dies ist eine Verknüpfung zum Angeben einer ProxyJump-Konfigurationsanweisung.

ProxyJump- ~/.ssh/configBeispiel

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

Verbinden mit

ssh server2_behind_server1 -v

In -vfür ausführliche Ausgabe

ProxyJump -JBefehlszeilenbeispiel

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

Verbinden mit

ssh server2 -J server1 -v

Oder benutze -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4oder höher

Verwenden Sie ProxyCommandmit-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

Verbinden mit

ssh server2 -v

Oder benutze -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSH unten 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

Verbinden mit:

ssh server2 -v

Oder benutze -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

Quellen

-Jin OpenSSH 7.3 hinzugefügt

  • ssh (1): Fügen Sie eine ProxyJump-Option und das entsprechende -J-Befehlszeilenflag hinzu, um eine vereinfachte Indirektion durch eine oder mehrere SSH-Bastionen oder "Sprung-Hosts" zu ermöglichen.

-Win OpenSSH 5.4 hinzugefügt

  • 'Netcat mode' zu ssh (1) hinzugefügt: "ssh -W host: port ..." Hiermit wird stdio auf dem Client mit einem einzelnen Port verbunden, der auf dem Server weitergeleitet wird. Dies ermöglicht beispielsweise die Verwendung von ssh als ProxyCommand, um Verbindungen über Zwischenserver weiterzuleiten. bz # 1618
GabLeRoux
quelle
3

Sie brauchen nicht netcatauf Ihrer Brücke. Wie DanSut in den Kommentaren vorgeschlagen hat, können Sie ssh -Wstattdessen die Befehlszeilenoption verwenden. Diese Konfiguration sollte für Sie funktionieren:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com
Jakuje
quelle
Es funktionierte. Vielen Dank. Ich weiß nicht warum, aber ich bin mir sicher, dass ich es schon einmal gescheitert bin, aber ich habe es erneut mit Erfolg versucht. Vielen Dank.
Eric B.