Voglio aprire una sessione desktop remota dal mio laptop al desktop tramite il tunnel SSH (inverso). Dovrebbe essere semplice (o almeno fattibile), giusto? Fino ad ora ho usato Team Viewer per accedere al desktop remoto. Mi piacerebbe ottenere risultati simili senza Team Viewer.
Ecco come appare il mio tunnel SSH:
laptop--->nat--->middleman<--nat<--desktop
Tutte le macchine eseguono Linux (principalmente Kubuntu 12.04 o OpenSuse 12.3). Non riesco a modificare alcuna porta o apportare modifiche alla configurazione sui router nat.
Descriverò il mio tunnel SSH perché la comprensione sembra essere necessaria per risolvere il problema VNC / desktop remoto che è il cuore della mia domanda. Per quanto riguarda questa tappa:
middleman<--nat<--desktop
... ecco come è stabilito:
autossh -M 5234 -N -f -R 1234:localhost:22 user@middleman.com
Per quanto riguarda questa tappa:
laptop--->nat--->middleman
Posso collegarmi a Middleman come segue:
me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman
Tuttavia, ciò che effettivamente devo fare è connettermi direttamente al desktop, non all'intermediario. Per farlo uso netcat ("nc") su middleman. Sulla base di ciò sembra che sia richiesto nc. Quindi modifico il mio file di configurazione SSH sul laptop per usare ProxyCommand e nc:
me@laptop:~/.ssh$ nano config
I contenuti sono:
Host family_desktops
ProxyCommand ssh middleman_fqdn nc localhost %p
User admin
PasswordAuthentication no
IdentityFile ~/.ssh/my_id_rsa
Dov'è middleman_fqdn
"middleman.com"
Quindi mi collego al "desktop" in un solo passaggio:
me@laptop:~$ ssh family_desktops -p 1234
(Ho ottenuto questo lavoro basato sull'aiuto qui e qui e su altre domande correlate che ho posto. Ho fatto un sacco di domande su questo argomento perché ho lottato con esso per molte settimane.)
Con questa connessione SSH raggiungo una shell perfettamente funzionante sul mio computer etichettata desktop
. Perfetto.
Ora ho solo bisogno di una soluzione desktop remota simile a VNC (o simile a TeamViewer) su questo tunnel SSH. Come?
Ecco cosa ho provato finora:
intermediario <- nat <- desktop
autossh -M 5235 -N -f -R 1235:localhost:5901 user@middleman.com
con tale connessione stabilita:
x11vnc -autoport 5901
Guardo per assicurarmi che si colleghi alla porta 5901, cosa che fa.
laptop ---> nat ---> intermediario <- 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
Installazione del tunnel:
me@laptop:~$ sudo ssh family_desktops
Client VNC:
connect to localhost:5901
Questo dà un errore di "server non trovato"
Ho provato una serie di varianti sul ProxyCommand, nessuna delle quali ha avuto successo. Ovviamente, sto indovinando su quali parametri dovrebbero essere in ProxyCommand e quali dovrebbero essere sulla riga di comando di ssh. Riesco a vedere alcuni potenziali problemi con la mia configurazione, ma non sono stato in grado di capire cosa farà funzionare tutto.
PS Come detto, ho fatto diverse domande a riguardo. Alcuni di questi mi hanno portato più vicino alla soluzione e costituiscono la base della mia attuale domanda. Altre delle mie precedenti domande su questo argomento mostrano solo la mia ignoranza e incapacità di porre la domanda nella forma giusta. A questo punto, questa domanda attuale rappresenta la mia migliore capacità di affermare quale sia il mio problema e quale sia la mia soluzione desiderata, ma alcune delle mie altre domande sono ancora aperte. Eccone uno rilevante.
desktop
è dietro un router NAT ed laptop
è dietro un router NAT.