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.