Introdução

*O Virtual Network Computing*, ou VNC, é um sistema de conexão que permite que você use seu teclado e mouse para interagir com um ambiente gráfico da área de trabalho em um servidor remoto. Isso facilita o gerenciamento de arquivos, software e configurações em um servidor remoto para os usuários que ainda não se sentem confortáveis com a linha de comando.

Neste guia de início rápido, você configurará um servidor VNC com o TightVNC em um servidor Ubuntu 20.04 e se conectará a ele com segurança através de um túnel SSH. Em seguida, você usará um programa cliente VNC em sua máquina local para interagir com o servidor através de um ambiente gráfico de desktop.

Pré-requisitos

vnc illustration for: Pré-requisitos

Para completar este tutorial, será necessário:

  • Um computador local com um cliente VNC instalado. O cliente VNC que você usa deve suportar conexões através de túneis SSH:
  • No macOS, utilize o programa integrado Screen Sharing ou utilize um app de multiplataforma como o RealVNC.
  • No Linux, escolha um dentre as várias opções, incluindo o vinagre, krdc, RealVNC ou o TightVNC.

Passo 1 — Instalando o Ambiente da Área de Trabalho e o Servidor VNC

Após se conectar ao servidor com o SSH, atualize a lista de pacotes:

				
					
sudo apt update

				
			

Em seguida, instale o Xfce juntamente com o pacote xfce4-goodies, que contém algumas melhorias para o ambiente desktop:

				
					
sudo apt install xfce4 xfce4-goodies

				
			

Uma vez que a instalação tiver terminada, instale o servidor do TightVNC:

				
					
sudo apt install tightvncserver

				
			

Em seguida, execute o comando vncpasswd para definir uma senha de acesso VNC e criar os arquivos de configuração iniciais:

				
					
vncpasswd

				
			

Será solicitado que você digite e verifique uma senha para acessar sua máquina remotamente:

				
					
[secondary_label Output]

You will require a password to access your desktops.



Password:

Verify:

				
			

A senha deve ter entre seis e oito caracteres de comprimento; senhas com mais de 8 caracteres serão truncadas automaticamente. Assim que verificar a senha, você terá a opção de criar uma senha apenas para visualização, mas isso não é necessário.

Se quiser alterar sua senha ou adicionar uma senha apenas para visualização, execute novamente o comando vncpasswd.

Passo 2 — Configurando o Servidor VNC

Os comandos que o servidor VNC executa na inicialização estão localizados em um arquivo de configuração chamado xstartup na pasta .vnc sob o seu diretório home. Neste passo, vamos criar um script xstartup personalizado que dirá ao servidor VNC para se conectar ao desktop Xfce.

Crie um novo arquivo xstartup e abra-o em um editor de texto, como o nano:

				
					
nano ~/.vnc/xstartup

				
			

Adicione as seguintes linhas ao novo arquivo:

				
					
[label ~/.vnc/xstartup]

#!/bin/bash

xrdb $HOME/.Xresources

startxfce4 &

				
			

Após o *shebang*), o primeiro comando no arquivo, xrdb $HOME/. Xresources, diz ao framework GUI do VNC para ler o usuário do servidor. Arquivo Xresources. O segundo comando diz ao servidor para iniciar o Xfce.

Salve e feche o arquivo após adicionar essas linhas. Se usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

Em seguida, torne o arquivo executável:

				
					
chmod +x ~/.vnc/xstartup

				
			

E inicie o servidor VNC com o comando vncserver:

				
					
vncserver -localhost

				
			

Este comando inclui a opção -localhost, que vincula o servidor VNC à interface loopback do seu servidor. Isso fará com que o VNC permita apenas conexões que se originam do servidor onde ele está instalado.

Você verá um resultado parecido com este:

				
					
[secondary_label Output]

New 'X' desktop is <^>your_hostname<^>:1



Starting applications specified in /home/<^>sammy<^>/.vnc/xstartup

Log file is /home/<^>sammy<^>/.vnc/<^>your_hostname<^>:1.log

				
			

Aqui, você pode ver que o comando lança uma instância de servidor padrão na porta 5901. Essa porta é chamada de *porta de exibição* e é referida pelo VNC como :1:

Passo 3 — Conectando-se ao Desktop do VNC com Segurança

Para se conectar com segurança ao seu servidor, você estabelecerá um túnel SSH e, em seguida, dirá ao seu cliente para se conectar usando esse túnel, em vez de fazer uma conexão direta.

Crie uma conexão SSH no seu computador local; ela encaminhará a conexão localhost para o VNC. É possível fazer isto através do terminal no Linux ou no macOS com o seguinte comando ssh:

				
					
[environment local]

ssh -L <^>59000<^>:localhost:<^>5901<^> -C -N -l <^>sammy<^> <^>your_server_ip<^>

				
			

A porta local pode ser qualquer porta que ainda não está bloqueada por outro programa ou processo, apesar de usarmos a <^>59000<^> neste exemplo. Além disso, certifique-se de alterar <^>sammy<^> para o nome de usuário do Ubuntu e <^>your_server_ip<^> para refletir o endereço IP do seu servidor.

Se estiver usando o PuTTY para se conectar ao seu servidor, você pode criar um túnel SSH, clicando com o botão direito do mouse na barra superior da janela do terminal e, em seguida, clicando na opção Change Settings…:

Encontre a ramificação Connection no menu em árvore, no lado esquerdo da janela de reconfiguração do PuTTY. Expanda a ramificação SSH e clique em Tunnels. Na tela Options controlling SSH port forwarding, digite 59000 como Source Port e localhost:5901 como Destination desta forma:

Em seguida, clique no botão Add e, em seguida, no botão Apply para implementar o túnel.

Assim que o túnel estiver em execução, utilize um cliente VNC para se conectar a localhost:59000. Será solicitado que autentique usando a senha definida no Passo 1.

Uma vez que estiver conectado, verá o área de trabalho padrão Xfce. Ela deve se parecer com isto:

É possível acessar arquivos em seu diretório inicial com o gerenciador de arquivos ou da linha de comando, como visto aqui:

Pressione CTRL+C no seu terminal local para parar o túnel SSH e voltar ao seu prompt. Isto também irá desconectar sua sessão VNC.

Passo 4 — Executando o VNC como um Serviço de Sistema

Ao configurar o servidor VNC para ser executado como um serviço systemd, você pode usar os comandos de gerenciamento do systemd.no servidor como start, stop e restart, bem como ativá-lo para iniciar a execução sempre que o servidor for inicializado.

Primeiro, crie um novo arquivo de unidade systemd chamado /etc/systemd/[email protected]:

				
					
sudo nano /etc/systemd/system/vncserver@.service

				
			

O símbolo @ no final do nome nos permitirá passar em um argumento que poderemos usar na configuração do serviço. Vamos usar isto para especificar a porta de exibição do VNC que queremos usar quando gerenciarmos o serviço.

Adicione as seguintes linhas ao arquivo, certificando-se de alterar o valor de User, Group, WorkingDirectory, e o nome de usuário no valor do PIDFILE para que corresponda ao seu nome de usuário:

				
					
[label  /etc/systemd/system/vncserver@.service]

[Unit]

Description=Start TightVNC server at startup

After=syslog.target network.target



[Service]

Type=forking

User=&lt;^&gt;sammy&lt;^&gt;

Group=&lt;^&gt;sammy&lt;^&gt;

WorkingDirectory=/home/&lt;^&gt;sammy&lt;^&gt;



PIDFile=/home/&lt;^&gt;sammy&lt;^&gt;/.vnc/%H:%i.pid

ExecStartPre=-/usr/bin/vncserver -kill :%i &gt; /dev/null 2&gt;&amp;1

ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i

ExecStop=/usr/bin/vncserver -kill :%i



[Install]

WantedBy=multi-user.target

				
			

Salve e feche o arquivo.

A seguir, faça com que o sistema saiba do novo arquivo de unidade.

				
					
sudo systemctl daemon-reload

				
			

Habilite o arquivo de unidade.

				
					
sudo systemctl enable vncserver@1.service

				
			

O 1 seguindo o símbolo @ significa em qual número de exibição o serviço deve aparecer, neste caso, o padrão :1, como foi discutido no Passo 2.

Interrompa a instância atual do servidor VNC se ela ainda estiver em execução.

				
					
vncserver -kill :1

				
			

Então, inicie-a como você iniciaria qualquer outro serviço systemd.

				
					
sudo systemctl start vncserver@1

				
			

É possível verificar se ele iniciou com este comando:

				
					
sudo systemctl status vncserver@1

				
			

Consulte nosso tutorial How To Use Systemctl to Manage Systemd Services and Units para obter mais informações sobre o systemctl.

Para reconectar, inicie seu túnel SSH novamente.

				
					
[environment local]

ssh -L &lt;^&gt;59000&lt;^&gt;:127.0.0.1:&lt;^&gt;5901&lt;^&gt; -C -N -l &lt;^&gt;sammy&lt;^&gt; &lt;^&gt;your_server_ip&lt;^&gt;

				
			

Então, faça uma nova conexão usando seu software cliente VNC com localhost:<^>59000<^> para se conectar ao seu servidor.

Conclusão

Você tem agora um servidor VNC seguro funcionando em seu servidor Ubuntu 20.04. Agora, você será capaz de gerenciar seus arquivos, softwares e configurações com uma interface gráfica conhecida e fácil de usar, e será capaz de executar remotamente softwares gráficos como navegadores web.