BOMBOLOM.COM

(ssh) Ligar por VNC a um servidor remoto de forma segura

Por vezes temos de ligar de forma gráfica a máquinas em redes remotas. Uma das formas mais eficientes de fazer isso é utilizando o protocolo VNC (Virtual Network Computing).

Neste artigo vamos ver como se pode fazer isto de forma segura.

Convém deixar bem claro que o protocolo VNC funciona em texto claro, não é por isso um protocolo muito seguro, e além disto, algumas implementações de servidores de VNC sofrem de problemas de segurança. Por outro lado, o SSH pode ser utilizado para estabelecer tuneis seguros entre duas redes, como já mostrámos aqui. Assim, se usarmos os dois protocolos em conjunção conseguimos ter ligações seguras e bastante rápidas.

Vamos supor que queremos ligar de uma máquina local, a um host remoto. A rede onde este host remoto se insere tem exposto à Internet um servidor SSH, com endereço 'ssh.example.com'. Finalmente o host remoto tem como endereço na rede remota '192.168.35.10' e tem a funcionar, na porta 5900, um servidor de VNC com autenticação VNC por password:

Rede Local | Internet | Rede remota
           |          |
+-----+    |          |
|Maq. |    |          |          
|Local+----|----------|--------+ ssh.example.com  
+-----+    |          |        |
           |          |   +----+-----+
           |          |   | FIREWALL |
           |          |   +----+-----+
           |          |        |           192.168.35.0/24
           |          |        \---------+-------+-----+-----+ .... 
           |          |                  |       |     |     |
           |          |           192.168.35.10           
                                  (Host remoto)

Fazer a ligação estabelecendo primeiro um túnel ssh

Para estabelecer o túnel deveremos fazer:

$ ssh -l user -C -N -L 5905:192.168.35.10:5900 ssh.example.com

Onde:

Uma vez estabelecida a ligação basta iniciar o cliente VNC noutra shell. Neste caso usei o cliente do RealVNC, versão opensource:

$ vncviewer localhost::5905

Ou:

$ vncviewer localhost:5

Notar que como redirecionamos a porta remota para a porta 5905 local, podemos facilmente estar ligados em simultâneo a vários hosts remotos, sem haver colisão de portas.

Fazer a ligação usando apenas um comando

É claro que o padrão de utilização descrito atrás é muito comum. Por isso este padrão está também embutido dentro do próprio cliente de VNC. Para estabelecermos o túnel e assim que este esteja em cima abrir a ligação VNC usando esse mesmo túnel basta fazer:

$ vncviewer -via user@ssh.example.com 192.168.35.10

Se quisermos usar outras opções do ssh, entãotemos de definir à priori a variável de ambiente VNC_VIA_CMD, neste caso é mais prático fazer um script:

#!/bin/sh

export VNC_VIA_CMD='/usr/bin/ssh -l user -C -f -L "$L":"$H":"$R" "$G" sleep 20'
vncviewer -via ssh.example.com 192.168.35.10

A grande vantagem desta solução consiste no facto de pudermos automatizar grande parte do processo. Por exemplo:

  1. Crie-se um script como o que se mostra acima para fazermos a ligação, podemos chamar-lhe 'example_com_10.sh';
  2. Configuramos a autenticação em 'ssh.example.com' usando o processo descrito aqui, de modo a não necessitarmos de inserir palavra passe para entrarmos neste servidor;
  3. Criar um ficheiro '.desktop' com o seguinte conteúdo:
    [Desktop Entry]
    Exec[$e]=~/bin/example_com_10.sh
    Icon=exec
    Name=Ligar example.com
    StartupNotify=true
    Terminal=false
    Type=Application
    

    E grava-lo no desktop.

Para ligar ao host remoto basta agora dar um duplo clic no icon 'Ligar example.com'.

06.09.2008 | Ler mais | Comentários | Tags , ,

Voltar à Página principal | Made with PyBlosxom