Introduçã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 de desktop gráfico em um servidor remoto. Isso facilita o gerenciamento de arquivos, software e configurações em um servidor remoto para usuários que ainda não estão confortáveis com a linha de comando.
Neste guia, você configurará um servidor VNC com o TightVNC em um servidor Ubuntu 22.04 e se conectará a ele de forma segura através de um túnel SSH. Em seguida, você usará um programa cliente VNC em sua máquina local para interagir com seu servidor através de um ambiente de desktop gráfico.
Pré-requisitos
Para concluir este tutorial, você precisará:
- Um servidor Ubuntu 22.04 com um usuário administrativo não root e um firewall configurado com UFW. Para configurar isso, siga nosso guia de configuração inicial do servidor para Ubuntu 22.04.
- A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:
Passo 1 — Instalando o Ambiente de Área de Trabalho e Servidor VNC
Por padrão, um servidor Ubuntu 22.04 não vem com um ambiente de área de trabalho gráfica ou um servidor VNC instalado, então você começará instalando esses.
Você tem várias opções quando se trata de escolher qual servidor VNC e ambiente de área de trabalho usar. Neste tutorial, você instalará pacotes para o ambiente de área de trabalho Xfce mais recente e o pacote TightVNC disponível no repositório oficial do Ubuntu. Tanto Xfce quanto TightVNC são conhecidos por serem leves e rápidos, o que ajudará a garantir que a conexão VNC seja suave e estável mesmo em conexões de internet mais lentas.
Após conectar-se ao seu servidor com SSH, atualize sua lista de pacotes:
Agora, instale Xfce junto com o pacote xfce4-goodies
, que contém algumas melhorias para o ambiente de área de trabalho:
Durante a instalação, você pode ser solicitado a escolher um gerenciador de exibição padrão para o Xfce. Um gerenciador de exibição é um programa que permite selecionar e fazer login em um ambiente de desktop por meio de uma interface gráfica. Você só estará usando o Xfce quando se conectar com um cliente VNC, e nestas sessões do Xfce, você já estará logado como seu usuário Ubuntu não-root. Portanto, para os propósitos deste tutorial, a escolha do gerenciador de exibição não é relevante. Selecione qualquer um e pressione ENTER
.
Assim que a instalação estiver concluída, instale o servidor TightVNC:
Em seguida, execute o comando vncserver
para definir uma senha de acesso VNC, criar os arquivos de configuração iniciais e iniciar uma instância do servidor VNC:
Você será solicitado a inserir e verificar uma senha para acessar sua máquina remotamente:
OutputYou 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.
Após verificar a senha, você terá a opção de criar uma senha somente de visualização. Os usuários que fizerem login com a senha somente de visualização não poderão controlar a instância do VNC com seu mouse ou teclado. Esta é uma opção útil se você quiser demonstrar algo para outras pessoas usando seu servidor VNC, mas não é obrigatório.
O processo então cria os arquivos de configuração padrão necessários e as informações de conexão para o servidor. Além disso, ele inicia uma instância padrão do servidor na porta 5901
. Esta porta é chamada de porta de exibição, e é referida pelo VNC como :1
. O VNC pode iniciar várias instâncias em outras portas de exibição, com :2
referindo-se à porta 5902
, :3
referindo-se ao 5903
, e assim por diante:
OutputWould you like to enter a view-only password (y/n)? n
xauth: file /home/sammy/.Xauthority does not exist
New 'X' desktop is your_hostname:1
Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Observe que se você quiser alterar sua senha ou adicionar uma senha somente para visualização, pode fazê-lo com o comando vncpasswd
:
Neste ponto, o servidor VNC está instalado e em execução. Agora você irá configurá-lo para iniciar o Xfce e nos fornecer acesso ao servidor por meio de uma interface gráfica.
Passo 2 — Configurando o Servidor VNC
O servidor VNC precisa saber quais comandos executar ao iniciar. Especificamente, o VNC precisa saber a qual ambiente de desktop gráfico deve se conectar.
Os comandos que o servidor VNC executa na inicialização estão localizados em um arquivo de configuração chamado xstartup
na pasta .vnc
dentro do seu diretório pessoal. O script de inicialização foi criado quando você executou o comando vncserver
no passo anterior, mas você criará o seu próprio para iniciar o desktop Xfce.
Como você vai alterar a configuração do servidor VNC, primeiro pare a instância do servidor VNC que está em execução na porta 5901
com o seguinte comando:
A saída será parecida com isso, embora você veja um PID diferente:
OutputKilling Xtightvnc process ID 17648
Antes de modificar o arquivo xstartup
, faça backup do original:
Agora crie um novo arquivo xstartup
e abra-o em um editor de texto, como nano
:
Em seguida, adicione as seguintes linhas ao arquivo:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
A primeira linha é um shebang. Em arquivos de texto executáveis em plataformas *nix, um shebang diz ao sistema qual interpretador passar para a execução desse arquivo. Neste caso, você está passando o arquivo para o interpretador Bash. Isso permitirá que cada linha sucessiva seja executada como comandos, na ordem.
O primeiro comando no arquivo, xrdb $HOME/.Xresources
, diz ao framework GUI do VNC para ler o arquivo .Xresources
do usuário do servidor. .Xresources
é onde um usuário pode fazer alterações em determinadas configurações da área de trabalho gráfica, como cores do terminal, temas de cursor e renderização de fontes. O segundo comando diz ao servidor para iniciar o Xfce. Sempre que você iniciar ou reiniciar o servidor VNC, esses comandos serão executados automaticamente.
Salve e feche o arquivo após adicionar essas linhas. Se você usou o nano
, faça isso pressionando CTRL + X
, Y
, depois ENTER
.
Para garantir que o servidor VNC possa usar este novo arquivo de inicialização adequadamente, você precisará torná-lo executável:
Então reinicie o servidor VNC:
Observe que desta vez o comando inclui a opção -localhost
, que vincula o servidor VNC à interface de loopback do seu servidor. Isso fará com que o VNC permita apenas conexões originadas do servidor em que está instalado.
Na próxima etapa, você estabelecerá um túnel SSH entre sua máquina local e seu servidor, essencialmente enganando o VNC para pensar que a conexão da sua máquina local se originou no seu servidor. Essa estratégia adicionará uma camada extra de segurança ao redor do VNC, pois os únicos usuários que poderão acessá-lo serão aqueles que já têm acesso SSH ao seu servidor.
Você verá uma saída semelhante a esta:
OutputNew 'X' desktop is your_hostname:1
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
Com a configuração em vigor, você está pronto para se conectar ao servidor VNC a partir da sua máquina local.
Passo 3 — Conectando-se ao Desktop VNC de forma segura
O próprio VNC não utiliza protocolos seguros ao se conectar. Para se conectar de forma segura ao seu servidor, você estabelecerá um túnel SSH e então dirá ao seu cliente VNC para se conectar usando esse túnel em vez de fazer uma conexão direta.
Crie uma conexão SSH em seu computador local que encaminhe de forma segura para a conexão localhost
para o VNC. Você pode fazer isso via terminal no Linux ou macOS com o seguinte comando ssh
:
Aqui está o que significam as opções deste comando ssh
:
-L 59000:localhost:5901
: O switch-L
especifica que a porta fornecida no computador local (59000
) deve ser encaminhada para o host e porta fornecidos no servidor de destino (localhost:5901
, significando porta5901
no servidor de destino, definido comoseu_ip_do_servidor
). Note que a porta local especificada é um tanto arbitrária; enquanto a porta não estiver vinculada a outro serviço, você pode usá-la como a porta de encaminhamento para o seu túnel.-C
: Esta bandeira habilita a compressão, o que pode ajudar a minimizar o consumo de recursos e acelerar as coisas.-N
: Esta opção indica aossh
que você não deseja executar nenhum comando remoto. Essa configuração é útil quando você apenas deseja encaminhar portas.-l sammy seu_ip_do_servidor
: O switch-l
permite que você especifique o usuário com o qual deseja fazer login assim que se conectar ao servidor. Certifique-se de substituirsammy
eseu_ip_do_servidor
pelo nome do seu usuário não root e pelo endereço IP do seu servidor.
Observação: Este comando estabelece um túnel SSH que encaminha informações da porta 5901
no seu servidor VNC para a porta 59000
na sua máquina local via porta 22
em cada máquina, a porta padrão para SSH. Supondo que você seguiu o pré-requisito Guia de Configuração Inicial do Servidor para Ubuntu 22.04, você terá adicionado uma regra UFW para permitir conexões com seu servidor via OpenSSH.
Isso é mais seguro do que simplesmente abrir o firewall do seu servidor para permitir conexões na porta 5901
, pois isso permitiria que qualquer pessoa acessasse seu servidor via VNC. Ao se conectar por meio de um túnel SSH, você está limitando o acesso do VNC a máquinas que já têm acesso SSH ao servidor.
Se você 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 depois clicando na opção Change Settings…:
Encontre o ramo Connection no menu de árvore do lado esquerdo da janela de Reconfiguração do PuTTY. Expanda o ramo SSH e clique em Tunnels. Na tela Options controlling SSH port forwarding, insira 59000
como a Source Port e localhost:5901
como o Destination, como mostrado:
Em seguida, clique no botão Add e depois no botão Apply para implementar o túnel.
Uma vez que o túnel estiver em execução, use um cliente VNC para se conectar a localhost:59000
. Você será solicitado a autenticar usando a senha que você definiu no Passo 1.
Depois de conectado, você verá a área de trabalho padrão do Xfce. Deverá parecer algo assim:
Você pode acessar arquivos no seu diretório pessoal 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 retornar ao seu prompt. Isso também desconectará sua sessão VNC.
Agora você pode configurar o seu servidor VNC para rodar como um serviço systemd.
Passo 4 — Executando o VNC como um Serviço do Sistema
Ao configurar o servidor VNC para ser executado como um serviço systemd, você pode iniciá-lo, pará-lo e reiniciá-lo conforme necessário, como qualquer outro serviço. Você também pode usar os comandos de gerenciamento do systemd para garantir que o VNC seja iniciado quando o seu servidor inicializar.
Primeiro, crie um novo arquivo de unidade chamado /etc/systemd/system/[email protected]
:
O símbolo @
no final do nome nos permite passar um argumento que você pode usar na configuração do serviço. Você usará isso para especificar a porta de exibição VNC que deseja usar ao gerenciar o serviço.
Adicione as seguintes linhas ao arquivo. Certifique-se de alterar o valor de User, Group, WorkingDirectory e o nome de usuário no valor de PIDFILE para corresponder ao seu nome de usuário:
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy
PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
O comando ExecStartPre
para o VNC se ele já estiver em execução. O comando ExecStart
inicia o VNC e define a profundidade de cor para 24 bits com uma resolução de 1280×800. Você também pode modificar essas opções de inicialização conforme necessário. Além disso, observe que o comando ExecStart
inclui novamente a opção -localhost
.
Salve e feche o arquivo.
Em seguida, faça o sistema reconhecer o novo arquivo de unidade:
Habilite o arquivo de unidade:
O 1
que segue o sinal @
indica em qual número de display o serviço deve aparecer, neste caso o padrão :1
como foi discutido no Passo 2.
Pare a instância atual do servidor VNC se ainda estiver em execução:
Em seguida, inicie-o como faria com qualquer outro serviço systemd:
Você pode verificar se ele iniciou com este comando:
Se ele iniciar corretamente, a saída deve parecer com isso:
Output● [email protected] - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago
Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS)
Main PID: 97103 (Xtightvnc)
Tasks: 77 (limit: 4665)
Memory: 146.7M
CPU: 4.459s
CGroup: /system.slice/system-vncserver.slice/[email protected]
. . .
Seu servidor VNC está agora pronto para uso sempre que o servidor for iniciado, e você pode gerenciá-lo com comandos systemctl
como qualquer outro serviço systemd.
No entanto, não haverá diferença do lado do cliente. Para se reconectar, inicie seu túnel SSH novamente:
Em seguida, faça uma nova conexão usando seu software cliente VNC para localhost:59000
para se conectar ao seu servidor.
Conclusão
Agora você tem um servidor VNC seguro em funcionamento em seu servidor Ubuntu 22.04. Agora você poderá gerenciar seus arquivos, software e configurações com uma interface gráfica amigável, e poderá executar software gráfico como navegadores da web remotamente.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04