SSH Tunel do skarpet odwróconych

26

ssh -D może zrobić port skarpet na lokalnym komputerze, który przekazuje ruch do zdalnego, a następnie do innych miejsc.

ssh -L port:host:hostport, nasłuchuj portu na komputerze lokalnym, przekaż ruch do „host: hostport” z punktu widzenia komputera zdalnego.

ssh -R port:host:hostportjest odpowiednikiem ssh -Lportu nasłuchującego na zdalnym komputerze i przekazuje ruch do „host: hostport” z punktu widzenia komputera lokalnego.

Ale jaki jest odpowiednik ssh -D, tj. Jak otworzyć port skarpet na zdalnej maszynie, który przekaże ruch do lokalnego, a następnie do innych miejsc?

Jagoda
źródło
1
pytanie traci wartość, ponieważ zaakceptowałeś odpowiedź, która nie działa i nie może działać. To (o czym wspomniał w komentarzu) robi to przez stackoverflow.com/questions/842021/...
barlop

Odpowiedzi:

12

Za pomocą -D& -Lmasz sposób komunikowania się w obie strony między dwiema maszynami.

Więc...

  • Z komputera lokalnego użyj, -Raby utworzyć port nasłuchiwania na komputerze zdalnym skierowanym na sshd komputera lokalnego.
  • Użyj -Dna zdalnym komputerze, wskazując na port, który utworzyłeś powyżej.

„Myślę, że” wypełnienie poniższego spowoduje, że będzie działać ...

ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"

remotehost”, „ remoteport” i „ localportpowyżej” wymagają zmiany. Pełnomocnik ds. Skarpet zostanie utworzony w 9050 r.

Drogie
źródło
Och, wygląda na to, że zostało to zadane na SO: stackoverflow.com/questions/842021/…. Jedyną odpowiedzią jest ten sam pomysł. Jestem pewien, że jeden zadziała ;-) EDYCJA - tak, ten miał więcej racji niż mój. Poprawiłem mój.
Drogi
Właściwie zastosowałem tę metodę pośrednią w mojej własnej sytuacji. Ale w sytuacji mojego firenda nie miał przywileju rootowania, więc nie może mieć usługi sshd, ma tylko klienta OpenSSH. Więc chcę dowiedzieć się, że istnieje metoda bezpośrednia, ale OpenSSH wydaje się nie ... Dziękuję ci tak samo
Berry
1
@barlop i to nie zadziała, ponieważ powiedzmy, że uruchamiasz plik wykonywalny ssh od 10.0.0.10 -R mówi o przekazaniu do 10.0.0.10:9050 Ale serwer SOCKS działa 10.0.0.5
barlop
1
@PriceChild, czy faktycznie przetestowałeś swoje polecenie?
barlop
5
-1 Nie zawracałeś sobie głowy testowaniem, a twoje polecenie jest całkowicie błędne. Próbowałeś uczynić to jak inna odpowiedź SO, ale nie udało ci się. SSH: od A do B, ten, do którego prowadzisz link, ma ssh -D słuchaj na A. Twój ma to słuchać na B. Twój jest w błędzie. Serwer proxy SOCKS nasłuchuje po stronie, która nasłuchuje.
barlop
14

Można go uzyskać w przejrzysty sposób za pomocą tego fragmentu w ~ / .ssh / config:

Host sockstunnel
    ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22

Host target
    RemoteForward 3128 localhost:3128
    ProxyCommand ssh -W target:22 sockstunnel

Detale

Chcemy odwrócić DynamicForward. Osiąga się to za pomocą dwóch poleceń ssh:

  • ssh -D 3128 localhost
  • ssh -R 3128:localhost:3128 target

W ten sposób cel ma tunel SOCKS do klienta SSH.

Zastosowałem klasyczny sposób łączenia ssh, aby osiągnąć zdalny cel przez hosty pośrednie, aby tworzenie tunelu SOCKS było obsługiwane w sposób przejrzysty podczas logowania do celu. Pierwsza sztuczka ProxyCommand + nc jest obowiązkowa, ponieważ -W oznacza ClearAllForwardings.

użytkownik305311
źródło
1
to jest warte złotego medalu.
Dakatine
Czy możesz podać bardziej szczegółowe wyjaśnienie tego, co robią twoje polecenia?
alonso s
3

Nie ma możliwości zapewnienia tunelu odwrotnych skarpet w OpenSSH, dlatego należy uruchomić komendę ssh udostępniającą proxy skarpet na „zdalnej” maszynie.

Jeśli maszyna zdalna nie może ssh do komputera lokalnego, najpierw utwórz połączenie ssh z lokalnego do zdalnego, które przekazuje port 22 do np. 2222. Następnie maszyna zdalna może ssh do komputera lokalnego na porcie 2222.

Thorbjørn Ravn Andersen
źródło
2
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com

od OpenSSH 7.6

ssh (1): dodaj obsługę wstecznego dynamicznego przekazywania. W tym trybie ssh będzie działać jako serwer proxy SOCKS4 / 5 i przekaże połączenia do miejsc docelowych żądanych przez zdalnego klienta SOCKS. Ten tryb jest wymagany przy użyciu rozszerzonej składni opcji -R i opcji RemoteForward, a ponieważ jest implementowany wyłącznie na kliencie, nie wymaga aktualizacji serwera do obsługi.

https://www.openssh.com/txt/release-7.6

zmx
źródło
Czy możesz podać referencje?
Scott
Nawiasem mówiąc, jest to błąd w openssh-client 8.0, w którym nie można wybrać adres wiążą się z portu ( ssh -R 127.0.0.3:1080 remote), można obecnie wiążą odwrotnego proxy SOCKS tylko z portem.
Adam Katz