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 [email protected]

następnie w 100.100.100.100,

ssh [email protected]

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:

[email protected]

próbowałem następujące:

ssh -L 22:localhost:22 [email protected]

bezskutecznie

tom91136
źródło

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 [email protected] -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).

MadHatter obsługuje Monikę
źródło
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 [email protected]; 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 [email protected] ssh [email protected]

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.

Jeff Strunk
źródło
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.

liori
źródło
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
pakujący
źródło
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.

arantius
źródło