Desktop remoto su tunnel inverso SSH per sostituire TeamViewer


14

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.


1
Nota a margine: non utilizzare i link "qui" o "questo" . Fornisci un nome significativo per i tuoi collegamenti, ad esempio il titolo della domanda o la pagina web a cui ti colleghi.
Marco

Non hai fatto questa domanda prima? unix.stackexchange.com/questions/82255/…
slm

@slm - vedi alcuni dei link nella mia domanda. Sono alcune delle mie domande correlate. Sto ancora cercando di trovare una soluzione e ogni domanda sembra avvicinarmi ...
MountainX

Questo sembra incredibilmente contorto. Uso il desktop remoto della mia macchina Windows 8 tramite SSH su una macchina anche sulla stessa rete che ha una porta aperta nel firewall.
Tim

@Tim questo è un tunnel SSH inverso ed è necessario perché desktopè dietro un router NAT ed laptopè dietro un router NAT.
MountainX

Risposte:


3

Puoi provare a fare il secondo passo senza fare il nc? Cioè: esegui il VNC con solo -L e -R. Credo che il problema sia che la tua sessione netcat si sta ricollegando a una già aperta. Quindi, quando fai le cose VNC, non usare netcat.


1

Invece di ProxyCommand, dovresti impostare "gatewayports yes" per il tuo intermediario sshd.conf.

  1. Quindi prendere il tunnel remoto da desktop a middleman e aprire la porta tcp x in middleman e vnc su local.
  2. Quindi porta il tunnel locale dal laptop al middleman aprendo la porta vnc sul tuo localhost e eseguendo il tunneling su x.
  3. Quindi connettiti a localhost: vnc, quindi passerà tramite tunnel locale a middleman e tunnel remoto a laptop vnc.

Dopo averlo fatto funzionare, scopri di più sulle impostazioni più sicure degli gatewayport.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.