Alguns usuários alugam VPS relativamente baratos com Windows para executar serviços de área de trabalho remota. O mesmo pode ser feito no Linux sem hospedar seu próprio hardware em um data center ou alugar um servidor dedicado. Algumas pessoas precisam de um ambiente gráfico familiar para testes e desenvolvimento ou de uma área de trabalho remota com um amplo canal para trabalhar em dispositivos móveis. Há muitas opções para usar o sistema Virtual Network Computing (VNC) baseado no protocolo Remote FrameBuffer (RFB). Neste breve artigo explicaremos como configurá-lo em uma máquina virtual com qualquer hipervisor.
Sumário:
Selecionando um servidor VNC
O serviço VNC pode ser integrado ao sistema de virtualização e o hipervisor irá conectá-lo aos dispositivos emulados e nenhuma configuração adicional será necessária. Esta opção envolve sobrecarga significativa e não é suportada por todos os provedores - mesmo em uma implementação que consome menos recursos, quando em vez de emular um dispositivo gráfico real, uma abstração simplificada (framebuffer) é transferida para a máquina virtual. Às vezes, um servidor VNC está vinculado a um servidor X em execução, mas esse método é mais adequado para acessar uma máquina física e, em uma máquina virtual, cria uma série de dificuldades técnicas. A maneira mais fácil de instalar um servidor VNC é com um servidor X integrado. Não requer dispositivos físicos (adaptador de vídeo, teclado e mouse) ou sua emulação através de hipervisor, sendo portanto adequado para qualquer tipo de VPS.
Instalação e configuração
Precisaremos de uma máquina virtual com Ubuntu Server 18.04 LTS em sua configuração padrão. Existem vários servidores VNC nos repositórios padrão desta distribuição:
A instalação do ambiente desktop com todas as dependências é feita com o seguinte comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Em seguida você precisa instalar o servidor VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-common
Executá-lo como superusuário é uma má ideia. Crie um usuário e grupo:
sudo adduser vnc
Vamos adicionar o usuário ao grupo sudo para que ele possa realizar tarefas relacionadas à administração. Se não houver essa necessidade, você pode pular esta etapa:
sudo gpasswd -a vnc sudo
A próxima etapa é executar o servidor VNC com privilégios de usuário vnc para criar uma senha segura e arquivos de configuração no diretório ~/.vnc/. O comprimento da senha pode ser de 6 a 8 caracteres (caracteres extras são cortados). Se necessário, também é definida uma senha apenas para visualização, ou seja, sem acesso ao teclado e mouse. Os seguintes comandos são executados como usuário vnc:
su - vnc
vncserver -localhost no
Por padrão, o protocolo RFB usa o intervalo de portas TCP de 5900 a 5906 - este é o chamado. portas de exibição, cada uma correspondendo a uma tela do servidor X. Neste caso, as portas estão associadas a telas de :0 a :6. A instância do servidor VNC que lançamos escuta a porta 5901 (tela: 1). Outras instâncias podem funcionar em outras portas com telas :2, :3, etc. Antes de continuar a configuração, você precisa parar o servidor:
vncserver -kill :1
O comando deve exibir algo assim: “Matando o ID do processo Xtigervnc 18105... sucesso!”
Quando o TigerVNC é iniciado, ele executa o script ~/.vnc/xstartup para definir as configurações. Vamos criar nosso próprio script, primeiro salvando uma cópia de backup do existente, se existir:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup
A sessão do ambiente de desktop XFCE é iniciada pelo seguinte script xstartup:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &
O comando xrdb é necessário para que o VNC leia o arquivo .Xresources no diretório inicial. Lá o usuário pode definir várias configurações gráficas da área de trabalho: renderização de fontes, cores de terminal, temas de cursor, etc. O script deve ser tornado executável:
chmod 755 ~/.vnc/xstartup
Isso conclui a configuração do servidor VNC. Se você executá-lo com o comando vncserver -localhost no (como usuário vnc), poderá se conectar com a senha especificada anteriormente e ver a seguinte imagem:
Iniciando um serviço via systemd
Iniciar manualmente um servidor VNC não é adequado para uso em combate, portanto configuraremos um serviço do sistema. Os comandos são executados como root (usamos sudo). Primeiro, vamos criar um novo arquivo de unidade para nosso servidor:
sudo nano /etc/systemd/system/[email protected]
O símbolo @ no nome permite passar um argumento para configurar o serviço. No nosso caso, especifica a porta de exibição VNC. O arquivo da unidade consiste em várias seções:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
Então você precisa notificar o systemd sobre o novo arquivo e ativá-lo:
sudo systemctl daemon-reload
sudo systemctl enable [email protected]
O número 1 no nome especifica o número da tela.
Pare o servidor VNC, inicie-o como um serviço e verifique o status:
# от имени пользователя vnc
vncserver -kill :1
# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1
Se o serviço estiver em execução, devemos obter algo assim.
Conexão de área de trabalho
Nossa configuração não utiliza criptografia, portanto os pacotes de rede podem ser interceptados por invasores. Além disso, em servidores VNC, muitas vezes
sudo netstat -ap |more
No Linux, FreeBSD, OS X e outros sistemas operacionais do tipo UNIX, um túnel do computador cliente é feito usando o utilitário ssh (o sshd deve estar em execução no servidor VNC):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip
A opção -L vincula a porta 5901 da conexão remota à porta 5901 no host local. A opção -C ativa a compactação e a opção -N informa ao ssh para não executar o comando remoto. A opção -l especifica login para login remoto.
Após configurar o túnel no computador local, você precisa iniciar o cliente VNC e estabelecer uma conexão com o host 127.0.0.1:5901 (localhost:5901), usando a senha especificada anteriormente para acessar o servidor VNC. Agora podemos nos comunicar de forma segura através de um túnel criptografado com o ambiente de desktop gráfico XFCE no VPS. Na captura de tela, o utilitário principal está sendo executado no emulador de terminal para mostrar o baixo consumo de recursos computacionais da máquina virtual. Então tudo dependerá das aplicações do usuário.
Você pode instalar e configurar um servidor VNC no Linux em praticamente qualquer VPS. Isso não requer configurações caras e que consomem muitos recursos com emulação de adaptador de vídeo ou a compra de licenças de software comercial. Além da opção de serviço do sistema que consideramos, existem outras: iniciar em modo daemon (via /etc/rc.local) quando o sistema inicializa ou sob demanda via inetd. Este último é interessante para criar configurações multiusuário. O Internet Superserver iniciará o servidor VNC e conectará o cliente a ele, e o servidor VNC criará uma nova tela e iniciará a sessão. Para autenticar dentro dele, você pode usar um gerenciador de exibição gráfica (por exemplo,
Fonte: habr.com