Pulpit zdalny przez tunel zwrotny SSH, aby zastąpić TeamViewer

14

Chcę otworzyć sesję pulpitu zdalnego z laptopa na komputer za pośrednictwem tunelu SSH (wstecznego). To powinno być proste (lub przynajmniej wykonalne), prawda? Do tej pory korzystałem z Team Viewer do logowania na pulpicie zdalnym. Chciałbym osiągnąć podobne wyniki bez Team Viewer.

Oto jak wygląda mój tunel SSH:

laptop--->nat--->middleman<--nat<--desktop

Wszystkie maszyny działają pod Linuksem (głównie Kubuntu 12.04 lub OpenSuse 12.3). Nie mogę zmienić żadnych portów ani dokonać zmian konfiguracji routerów nat.

Opiszę mój tunel SSH, ponieważ zrozumienie, które wydaje się konieczne w rozwiązaniu problemu VNC / zdalnego pulpitu, który jest sercem mojego pytania. W odniesieniu do tej nogi:

middleman<--nat<--desktop

... oto jak to się ustanawia:

autossh -M 5234 -N -f -R 1234:localhost:22 [email protected]

W odniesieniu do tej nogi:

laptop--->nat--->middleman

Mogę połączyć się z pośrednikiem w następujący sposób:

me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman  

Jednak tak naprawdę muszę połączyć się bezpośrednio z komputerem stacjonarnym, a nie z pośrednikiem. Aby to zrobić, używam netcat („nc”) na pośredników. Na tej podstawie wydaje się, że nc jest wymagany. Więc edytuję mój plik konfiguracyjny SSH na laptopie, aby użyć ProxyCommand i nc:

me@laptop:~/.ssh$ nano config

Zawartość to:

Host family_desktops
  ProxyCommand ssh middleman_fqdn nc localhost %p
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Gdzie middleman_fqdnjest jak „middleman.com”

Następnie łączę się z „pulpitem” w jednym kroku:

me@laptop:~$ ssh family_desktops -p 1234

(Dostałem tę pracę w oparciu o pomoc tu i tutaj i inne powiązane pytania, które zadałem. Zadałem mnóstwo pytań na ten temat, ponieważ zmagałem się z tym od wielu tygodni).

Dzięki temu połączeniu SSH osiągam w pełni funkcjonalną powłokę na moim komputerze oznaczoną desktop. Doskonały.

Teraz potrzebuję tylko rozwiązania zdalnego pulpitu typu VNC (lub TeamViewer) w tym tunelu SSH. W jaki sposób?

Oto, co próbowałem do tej pory:

pośrednik <- nat <- pulpit

autossh -M 5235 -N -f -R 1235:localhost:5901 [email protected]

z tym połączeniem ustanowionym:

x11vnc -autoport 5901 

Patrzę, aby upewnić się, że łączy się z portem 5901, co robi.

laptop ---> nat ---> middleman <- nat <- desktop

laptop ~ / .ssh / config:

Host family_desktops
  ProxyCommand ssh -NL 5901:localhost:1235 middleman.com nc localhost 1235
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Konfiguracja tunelu:

me@laptop:~$ sudo ssh family_desktops

Klient VNC:

connect to localhost:5901

Daje to błąd „nie znaleziono serwera”

Próbowałem wielu odmian ProxyCommand, ale żadna z nich się nie powiodła. Oczywiście zgaduję, które parametry powinny znajdować się w ProxyCommand, a które w wierszu poleceń ssh. Widzę kilka potencjalnych problemów z konfiguracją, ale nie byłem w stanie dowiedzieć się, co sprawi, że wszystko będzie działać.

PS Jak wspomniano, zadałem kilka pytań na ten temat. Niektóre z nich zbliżyły mnie do rozwiązania i stanowią podstawę mojego obecnego pytania. Inne moje wcześniejsze pytania na ten temat pokazują tylko moją ignorancję i niezdolność do zadawania pytań we właściwej formie. W tym momencie to obecne pytanie reprezentuje moją najlepszą zdolność do określenia, jaki jest mój problem i jakie jest moje pożądane rozwiązanie, ale niektóre z moich innych pytań są nadal otwarte. Oto jeden, który jest istotny.

MountainX
źródło
1
Uwaga dodatkowa: Nie używaj linków „tutaj” ani „to” . Podaj sensowną nazwę dla swoich linków, np. Tytuł pytania lub strony internetowej, do której linkujesz.
Marco
Nie zadałeś wcześniej tego pytania? unix.stackexchange.com/questions/82255/…
slm
@slm - zobacz niektóre linki w moim pytaniu. Oto niektóre z moich powiązanych pytań. Wciąż staram się znaleźć rozwiązanie i każde pytanie wydaje się zbliżać mnie ...
MountainX,
To wydaje się niezwykle skomplikowane. Używam zdalnego pulpitu mojego komputera z systemem Windows 8 przez SSH'ing na maszynie również w tej samej sieci, która ma otwarty port w zaporze ogniowej.
Tim
@Tim to jest tunel zwrotny SSH i jest wymagany, ponieważ desktopznajduje się za routerem NAT i laptopza routerem NAT.
MountainX

Odpowiedzi:

3

Czy możesz spróbować zrobić drugi krok bez zrobienia NC? To znaczy - wykonaj VNC za pomocą tylko -L i -R. Myślę, że problem polega na tym, że twoja sesja netcat łączy się z już otwartą. Więc podczas wykonywania VNC nie używaj netcata.

prateek61
źródło
1

Zamiast ProxyCommand powinieneś ustawić „gatewayports yes” dla swojego pośrednika sshd.conf.

  1. Następnie weź zdalny tunel z pulpitu do pośrednika i otwórz port tcp x w pośredniku i vnc na lokalnym.
  2. Następnie weź lokalny tunel z laptopa do pośrednika, otwierając port VNC do lokalnego hosta i tunelując go do x.
  3. Następnie połącz się z localhost: vnc, aby przejść przez tunel lokalny do pośrednika, a tunel zdalny do laptopów vnc.

Gdy już zaczniesz działać, dowiedz się więcej o bezpieczniejszych ustawieniach bramek.

Limalski
źródło