Prześlij SSH przez tunel SSH


30

Moja sytuacja :

Ja (localhost) -> Serwer A (ip: 100.100.100.100) => (serwer B (ip: 192.168.25.100), serwer ....)

jestem w stanie połączyć się z serwerem SSH, ponieważ ma on prawdziwy adres IP, jeśli chcę połączyć się z serwerem b, chciałbym ssh serwer b z jego adresem ip (192.168.25.100)

przykład:

z mojego komputera:

ssh user@100.100.100.100

następnie w 100.100.100.100,

ssh user@192.168.25.100

to doprowadziłoby mnie do serwera B z ssh

co jeśli chcę połączyć się bezpośrednio z serwerem b? jak mogę to zrobić?

przykład:

z mojego oc:

ssh@192.168.25.100

próbowałem następujące:

ssh -L 22:localhost:22 user@100.100.100.100

bezskutecznie

Odpowiedzi:


30

Twój problem związany jest z powiązaniem nasłuchiwania z localhost: 22; słucha tego już sshd. Tunelowanie połączenia ssh przez połączenie ssh jest całkowicie legalne i robię to cały czas, ale musisz wybrać nieużywane porty dla słuchaczy przekierowujących.

Próbować

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

następnie

me% ssh localhost -p 2201

Powinieneś skończyć na serwerze B (chyba że coś jest już ze mną związane: 2201, w takim przypadku wybierz inny port).


Dziękuję za szybką odpowiedź! działa jednak jak mogę przekazać wszystkie połączenia zamiast tylko ssh (22)?
— tom91136,

1
To pełnowymiarowa sieć VPN, której szukasz, a nie tylko przekierowywanie portów. Jest writeup jak zrobić VPN-over-ssh na bodhizazen.net/Tutorials/VPN-Over-SSH , ale wymaga zdalnego dostępu użytkownika root przez SSH z A. Albo można zajrzeć do OpenVPN lub innymi rozwiązaniami VPN, ale znowu, będziesz potrzebować przywileju na A, aby te działały.
— MadHatter obsługuje Monikę

wielkie dzięki, ostatnia rzecz, co jeśli chcę tylko połączyć się z A?
— tom91136,

me% ssh user@100.100.100.100; czy już tego nie omówiliśmy? czy masz na myśli „co jeśli chcę w pełni rozwiniętą sieć VPN dla A?”, w którym to przypadku moja odpowiedź jest ważna.
— MadHatter obsługuje Monikę

1
Dla osób, które chcą VPN przez SSH, nie mają dostępu do roota na serwerze, ale ma on Python, spróbuj sshuttle .
— André Paramés,

23

Nie musisz używać przekierowania portów ssh do ssh do wewnętrznego komputera za pośrednictwem serwera proxy. Możesz użyć funkcji ssh wykonywania polecenia na pierwszym serwerze, z którym się łączysz, aby ssh na trzecim komputerze.

ssh -t user@100.100.100.100 ssh user@192.168.25.100

Ta -topcja zmusza ssh do przydzielenia pseudo-tty, aby można było uruchomić interaktywne polecenie.

Może to również działać z kluczami ssh. Jeśli masz klucz prywatny i publiczny na komputerze A, a klucz publiczny w plikach kluczy autoryzowanych na komputerach B i C, możesz użyć tej -Aopcji, aby przekazać połączenie agenta uwierzytelniania.


10

Użyłem innego rozwiązania. Użyłem ProxyCommandopcji (tutaj ~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

Nie konfiguruje to żadnego tunelu port-port, zamiast tego tuneluje ssh przy użyciu standardowego wejścia / wyjścia. Ta metoda ma tę wadę, że w rzeczywistości istnieją trzy połączenia ssh do uwierzytelnienia. Ale aby połączyć się z hostem wewnętrznym, wystarczy wpisać:

ssh myinsidehost2

... więc nie musisz się martwić o wybór adresu IP dla tego tunelu.


1
Jest to jedyny rodzaj układania SSH, który według mnie działa. Próbowałem już ( corkscrewlub ), ale żaden z nich nie działa tak płynnie jak ten. ncnetcat
— Phuong Nguyen,

7

według strony podręcznika ssh ProxyCommand jest poprawną metodą

składnia jest następująca:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

Nie jestem pewien, czy -Wopcja istniała, kiedy udzielono odpowiedzi na to pytanie. Ale w nowszych wersjach klienta ssh zgadzam się, że kombinacja ProxyCommandi -Wjest preferowaną metodą. Być może dodaj kontekst pokazujący zarówno, jak można go użyć w wierszu poleceń, jak i przykład sekcji dla .ssh/config.
— kasperd

Masz pomysł, gdzie znaleźć informacje o zmianach / wersjach, które mówią nam, które wersje SSH mają -Wpolecenie, a które nie? Trochę googlingu nie dało mi szybko odpowiedzi ...
— dmh

-Wzostał wprowadzony w OpenSSH 5.4, wydany w 2010 roku. Więc odpowiedź brzmi: tak @kasperd
— 0xC0000022L

7

Począwszy od wersji OpenSSH 7.3 (pod koniec 2016 r.) Najprostszym sposobem jest ustawienie ProxyJump . W twoim ~/.ssh/config:

Host B
  ProxyJump A

Lub w wierszu poleceń,, -J B.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.