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 user@middleman.com
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_fqdn
jest 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 user@middleman.com
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.
desktop
znajduje się za routerem NAT i laptop
za routerem NAT.