Popraw ustawienia pliku konfiguracyjnego ssh, aby tunelować do trzeciego komputera

20

Próbuję tunelować do serwera za pośrednictwem serwera pomostowego. Do tej pory udało mi się uruchomić go poprawnie z powłoki poleceń za pomocą następującego polecenia:

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

Ale próbowałem zawinąć to w mój ~/.ssh/configplik i mam problemy. Próbowałem:

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

Ale kiedy to robię, otrzymuję następujący komunikat o błędzie remoteserver.comi nie jestem pewien, co go powoduje:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: nie znaleziono

Wiem, że kiedy się loguję remoteserver.com, moja powłoka jest /usr/bin/ksh.

Próbowałem dodać argumenty ścieżki do poleceń ssh w pliku konfiguracyjnym, ale nie miało to znaczenia.

Jakieś pomysły, co to może być?

Eric B.
źródło
Po prostu nie tak ProxyCommandnależy go używać. Zazwyczaj używa się go w przypadku netcat, gdzie ssh przepuszcza przez nie dane wyjściowe, a netcat działa jako tunel do portu SSH zdalnego serwera. Potrzebujesz ProxyCommand czegoś takiego, ssh -W %h:%p [email protected]jeśli chcesz korzystać z tej funkcji.
DanSut,
Niestety mój serwer mostkowy nie ma na nim zainstalowanego netcata, więc staram się, aby działało to w inny sposób. Pomyślałem, że jeśli to może działać z wiersza poleceń, powinien istnieć sposób na umieszczenie informacji w pliku konfiguracyjnym.
Eric B.
W używanym wierszu poleceń, które działa ssh -A [email protected]jako polecenie do uruchomienia na maszynie mostowej, config nie daje możliwości dostarczenia domyślnych poleceń. To, co próbujesz zrobić workssamo w sobie, ale potem ssh próbuje użyć twojego ProxyCommandjako tunelu i zaczyna odpalać protokół SSH w dół, tam gdzie na drugim końcu czeka powłoka zamiast sshd nasłuchującego protokołu SSH.
DanSut
@dansut działał świetnie. Dzięki!
Eric B.,

Odpowiedzi:

25

Odpowiedź Jakuje jest słuszna, ale od OpenSSH 7.3możesz teraz używać, -J ProxyJumpco jest łatwiejsze. Zobacz moje notatki:

OpenSSH 7.3lub nowszy

Zastosowanie ProxyJump. Jak wyjaśniono w instrukcji:

-J [użytkownik @] host [: port]
Połącz się z hostem docelowym, najpierw nawiązując połączenie ssh z hostem skoku, a następnie nawiązując stamtąd przekazywanie TCP do ostatecznego miejsca docelowego. Wiele skoków skoku można określić, oddzielając je przecinkami. Jest to skrót do określenia dyrektywy konfiguracyjnej ProxyJump.

~/.ssh/configPrzykład ProxyJump

~/.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

Połączyć się z

ssh server2_behind_server1 -v

Dodaj, -vaby uzyskać pełne wyjście

Przykład -Jwiersza polecenia ProxyJump

~/.ssh/config

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

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

Połączyć się z

ssh server2 -J server1 -v

Albo użyj -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4lub nowszy

Użyj ProxyCommandz-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

Połączyć się z

ssh server2 -v

Albo użyj -o

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

Poniżej OpenSSH 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

Połączyć się z:

ssh server2 -v

Albo użyj -o

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

Źródła

-Jdodano w OpenSSH 7.3

  • ssh (1): Dodaj opcję ProxyJump i odpowiednią flagę wiersza polecenia -J, aby umożliwić uproszczoną pośrednią przez jeden lub więcej bastionów SSH lub „hostów skokowych”.

-Wdodane w OpenSSH 5.4

  • Dodano „tryb netcat” do ssh (1): „ssh -W host: port ...” Łączy to stdio na kliencie z pojedynczym portem przekierowującym na serwerze. Umożliwia to na przykład użycie ssh jako ProxyCommand do kierowania połączeń przez serwery pośrednie. bz # 1618
GabLeRoux
źródło
3

Nie potrzebujesz netcatna swoim moście. Jak DanSut zaproponował w komentarzach, możesz ssh -Wzamiast tego użyć opcji wiersza poleceń, ta konfiguracja powinna działać dla Ciebie:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com
Jakuje
źródło
Zadziałało. Dzięki. Nie jestem pewien, dlaczego, ale jestem pewien, że próbowałem już raz, ale już nie powiodło się, ale spróbowałem ponownie z sukcesem. Dzięki.
Eric B.,