Você pode tentar fazer o segundo passo sem fazer o nc? Isso é - faça o VNC com apenas o -L e -R. Eu acredito que o problema é que sua sessão de netcat está se conectando de volta a uma já aberta. Então, ao fazer o VNC, não use o netcat.
Eu 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, tenho usado o Team Viewer para fazer login na área de trabalho remota. Gostaria de obter resultados semelhantes sem o Team Viewer.
Veja como meu túnel SSH se parece:
laptop--->nat--->middleman<--nat<--desktop
Todas as máquinas estão rodando Linux (principalmente o Kubuntu 12.04 ou OpenSuse 12.3). Não consigo alterar nenhuma porta nem fazer alterações de configuração nos roteadores nat.
Descreverei meu túnel SSH, porque a compreensão que parece ser necessária na solução do problema do VNC / área remota é o cerne 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 essa perna:
laptop--->nat--->middleman
Eu posso me conectar ao intermediário da seguinte forma:
me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman
No entanto, o que realmente preciso fazer é conectar-se diretamente à área de trabalho, não ao intermediário. Para fazer isso eu uso o netcat ("nc") no intermediário. Com base em este parece que nc é obrigató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"
Depois, conecto-me a "área de trabalho" em uma etapa:
me@laptop:~$ ssh family_desktops -p 1234
(Consegui esse trabalho com base na ajuda aqui e aqui e outras questões relacionadas eu perguntei. Eu fiz uma tonelada de perguntas sobre este tópico porque eu tenho lutado com isso por muitas semanas.)
Com essa conexão SSH, eu atinjo um shell totalmente funcional no meu computador chamado desktop
. Perfeito.
Agora, só preciso de uma solução de área de trabalho remota semelhante a VNC (ou semelhante ao TeamViewer) neste túnel SSH. Como?
intermediário < - nat < - área de trabalho
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 acontece.
laptop --- > nat --- > intermediário < - nat < - área de trabalho
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
Isto dá um erro de "servidor não encontrado"
Eu tentei várias variações no ProxyCommand, nenhuma delas obteve sucesso. Obviamente, estou supondo sobre quais parâmetros devem estar em ProxyCommand e quais devem estar na linha de comando ssh. Posso ver alguns problemas potenciais com a minha configuração, mas não consegui descobrir o que fará tudo funcionar.
P.S. Como mencionado, fiz várias perguntas sobre isso. Alguns desses me levaram para mais perto da solução e formam a base da minha questão atual. Outra das minhas perguntas anteriores sobre este tópico apenas mostra minha ignorância e incapacidade de fazer a pergunta da maneira correta. Neste ponto, esta questão atual representa a minha melhor capacidade para indicar qual é o meu problema e qual é a minha solução desejada, mas algumas das minhas outras perguntas ainda estão em aberto. Aqui está uma que é relevante.
Em vez de ProxyCommand, você deve definir "gatewayports yes" para o seu intermediário sshd.conf.
Depois de trabalhar, saiba mais sobre as configurações mais seguras do gatewayports.