Introdução
Computação Virtual em Rede, 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 a gestão 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ê irá 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ê utilizará 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 completar este tutorial, você precisará de:
- 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 o 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 muitas opções quando se trata de qual servidor VNC e ambiente de área de trabalho você escolhe. 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 o 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 nessas sessões do Xfce, você já estará logado como seu usuário não-root do Ubuntu. 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 completa, instale o servidor TightVNC:
Em seguida, execute o comando vncserver
para definir uma senha de acesso ao 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. Senhas com mais de 8 caracteres serão truncadas automaticamente.
Depois de verificar a senha, você terá a opção de criar uma senha somente para visualização. Usuários que fizerem login com a senha somente para visualização não poderão controlar a instância do VNC com o mouse ou teclado. Esta é uma opção útil se você quiser demonstrar algo para outras pessoas usando seu servidor VNC, mas isso 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 múltiplas instâncias em outras portas de exibição, com :2
referindo-se à porta 5902
, :3
referindo-se a 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 fazer isso 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 dar acesso ao servidor através 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 qual ambiente de desktop gráfico ele 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 home. 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 ambiente de desktop Xfce.
Porque você vai estar alterando como o servidor VNC está configurado, primeiro pare a instância do servidor VNC que está em execução na porta 5901
com o seguinte comando:
A saída será semelhante a esta, 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 informa ao sistema qual interpretador passar para aquele arquivo para execução. 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 do desktop gráfico, como cores do terminal, temas do 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 corretamente este novo arquivo de inicialização, 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 loopback do seu servidor. Isso fará com que o VNC permita apenas conexões que se originem 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 em 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 sã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 conectar. Para se conectar de forma segura ao seu servidor, você estabelecerá um túnel SSH e depois 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 a porta5901
no servidor de destino, definido comoseu_endereço_ip_do_servidor
). Observe que a porta local que você especifica é um tanto arbitrária; desde que a porta não esteja 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 informa aossh
que você não deseja executar nenhum comando remoto. Essa configuração é útil quando você apenas deseja encaminhar portas.-l sammy seu_endereço_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_endereço_ip_do_servidor
pelo nome do seu usuário não root e pelo endereço IP do seu servidor.
Nota: Este comando estabelece um túnel SSH que encaminha informações da porta 5901
no seu servidor VNC para a porta 59000
no seu computador local via porta 22
em cada máquina, a porta padrão para SSH. Supondo que você seguiu o guia pré-requisito Configuração Inicial do Servidor para o Ubuntu 22.04, você terá adicionado uma regra UFW para permitir conexões com o 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 conectar-se através de um túnel SSH, você está limitando o acesso VNC às máquinas que já têm acesso SSH ao 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 na barra superior da janela do terminal e, em seguida, clicando na opção Alterar Configurações…:
Encontre o ramo Conexão no menu de árvore do lado esquerdo da janela de Reconfiguração do PuTTY. Expanda o ramo SSH e clique em Túneis. Na tela Opções de controle de encaminhamento de porta SSH, insira 59000
como a Porta de Origem e localhost:5901
como o Destino, assim:
Em seguida, clique no botão Adicionar e depois no botão Aplicar para implementar o túnel.
Uma vez que o túnel esteja em execução, use um cliente VNC para se conectar a localhost:59000
. Você será solicitado a autenticar usando a senha definida 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 pela linha de comando, como visto aqui:
Pressione CTRL+C
no seu terminal local para interromper o túnel SSH e retornar ao prompt. Isso também desconectará sua sessão VNC.
Agora você pode configurar seu servidor VNC para ser executado 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 iniciar, parar 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 servidor for inicializado.
Primeiro, crie um novo arquivo de unidade chamado /etc/systemd/system/[email protected]
:
O símbolo @
no final do nome nos permitirá passar um argumento que você pode usar na configuração do serviço. Você usará isso para especificar a porta de exibição do 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
interrompe o VNC se 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 tomar conhecimento do novo arquivo de unidade:
Habilite o arquivo de unidade:
O 1
seguinte ao sinal @
indica em qual número de exibição o serviço deve aparecer, neste caso o padrão :1
conforme discutido no Passo 2.
Interrompa a instância atual do servidor VNC se ainda estiver em execução:
Em seguida, inicie-o como você iniciaria qualquer outro serviço systemd:
Você pode verificar se ele foi iniciado com este comando:
Se for iniciado corretamente, a saída deve se 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 seu servidor inicializar, e você pode gerenciá-lo com comandos systemctl
como qualquer outro serviço systemd.
No entanto, não haverá nenhuma diferença no lado do cliente. Para reconectar, inicie seu túnel SSH novamente:
Em seguida, faça uma nova conexão usando o seu software cliente VNC para localhost:59000
para se conectar ao seu servidor.
Conclusão
Agora você tem um servidor VNC seguro funcionando 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