Área de trabalho remota sobre túnel reverso SSH para substituir o TeamViewer

14

Quero abrir uma sessão de área de trabalho remota do meu laptop para a área de trabalho através do meu túnel SSH (reverso). Isso deve ser simples (ou pelo menos factível), certo? Até agora, eu estava usando o Team Viewer para fazer login na área de trabalho remota. Gostaria de obter resultados semelhantes sem o Team Viewer.

Aqui está a aparência do meu túnel SSH:

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

Todas as máquinas estão executando o Linux (principalmente o Kubuntu 12.04 ou o OpenSuse 12.3). Não consigo alterar nenhuma porta nem fazer alterações na configuração dos roteadores nat.

Descreverei meu túnel SSH porque entender que parece ser necessário para solucionar o problema do VNC / área de trabalho remota que é o coração da minha pergunta. Em relação a esta perna:

middleman<--nat<--desktop

... aqui está como é estabelecido:

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

Em relação a esta perna:

laptop--->nat--->middleman

Posso me conectar ao intermediário da seguinte maneira:

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

No entanto, o que eu realmente preciso fazer é conectar-se diretamente à área de trabalho, não ao intermediário. Para fazer isso, uso o netcat ("nc") no intermediário. Com base nisso , parece que nc é necessário. Então, eu edito meu arquivo de configuração SSH no laptop para usar ProxyCommand e nc:

me@laptop:~/.ssh$ nano config

O conteúdo é:

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

Onde middleman_fqdné como "middleman.com"

Então eu apenas conecto ao "desktop" em uma etapa:

me@laptop:~$ ssh family_desktops -p 1234

(Consegui esse trabalho com base na ajuda aqui e aqui e em outras perguntas relacionadas que fiz. Fiz uma tonelada de perguntas sobre esse tópico porque estou lutando com ele há muitas semanas.)

Com esta conexão SSH, chego a um shell totalmente funcional no meu computador rotulado desktop. Perfeito.

Agora só preciso de uma solução de área de trabalho remota tipo VNC (ou TeamViewer) sobre esse túnel SSH. Quão?

Aqui está o que eu tentei até agora:

intermediário <- nat <- desktop

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

com essa conexão estabelecida:

x11vnc -autoport 5901 

Eu assisto para garantir que ele se conecte à porta 5901, o que faz.

laptop ---> nat ---> intermediário <- 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

Configuração do túnel:

me@laptop:~$ sudo ssh family_desktops

Cliente VNC:

connect to localhost:5901

Isso gera um erro de "servidor não encontrado"

Eu tentei várias variações no ProxyCommand, nenhuma delas bem-sucedida. Obviamente, estou adivinhando quais parâmetros devem estar no ProxyCommand e quais devem estar na linha de comando ssh. Posso ver alguns problemas em potencial na minha configuração, mas não consegui descobrir o que fará tudo funcionar.

PS Como mencionado, eu fiz várias perguntas sobre isso. Alguns deles me levaram mais perto da solução e formam a base da minha pergunta atual. Outras perguntas anteriores sobre esse tópico mostram apenas minha ignorância e incapacidade de fazer a pergunta da forma correta. Neste ponto, esta pergunta atual representa minha melhor capacidade de declarar qual é o meu problema e qual é a minha solução desejada, mas algumas das minhas outras perguntas ainda estão abertas também. Aqui está um que é relevante.

MountainX
fonte
1
Nota lateral: Por favor, não use os links "aqui" ou "isto" . Forneça um nome significativo para seus links, por exemplo, o título da pergunta ou da página da web à qual você vincula.
9133 Marco Marco
Você não fez essa pergunta antes? unix.stackexchange.com/questions/82255/…
slm
@ SLM - veja alguns dos links na minha pergunta. São algumas das minhas perguntas relacionadas. Eu ainda estou tentando encontrar uma solução e cada pergunta parece estar me aproximando ... #
MountainX
Isso parece incrivelmente complicado. Eu uso a área de trabalho remota da minha máquina Windows 8 fazendo o SSH em uma máquina também na mesma rede que possui uma porta aberta no firewall.
Tim
@ Tim: este é um túnel SSH reverso e é necessário porque desktopestá atrás de um roteador NAT e laptopatrás de um roteador NAT.
MountainX

Respostas:

3

Você pode tentar dar o segundo passo sem fazer o nc? Ou seja - faça o VNC apenas com -L e -R. Acredito que o problema é que sua sessão do netcat está se conectando novamente a uma já aberta. Portanto, ao fazer o material VNC, não use o netcat.

prateek61
fonte
1

Em vez de ProxyCommand, você deve definir "gatewayports yes" para o seu intermediário sshd.conf.

  1. Em seguida, pegue o túnel remoto do desktop para o intermediário e abra a porta tcp x no intermediário e no vnc no local.
  2. Em seguida, pegue o túnel local do laptop para o intermediário, abrindo a porta vnc para o host local e encapsulando-o para x.
  3. Em seguida, conecte-se ao localhost: vnc, para que ele passe pelo túnel local para o intermediário e pelo túnel remoto para os laptops vnc.

Depois de fazê-lo funcionar, saiba mais sobre configurações mais seguras do gatewayport.

Limalski
fonte