Alguns usuários alugam um Windows VPS relativamente barato para executar os Serviços de Área de Trabalho Remota. O mesmo pode ser feito no Linux sem colocar seu próprio hardware no data center ou alugar um servidor dedicado. Alguém precisa de um ambiente gráfico familiar para teste e desenvolvimento ou uma área de trabalho remota com ampla largura de banda para trabalhar em dispositivos móveis. Há muitos usos para Virtual Network Computing (VNC) com base no protocolo Remote FrameBuffer (RFB). Em um breve artigo, mostraremos como configurá-lo em uma máquina virtual com qualquer hipervisor.
Índice:
Selecionando um servidor VNC
Instalando e configurando
Iniciando um serviço via systemd
Conectando a um desktop
Escolhendo um servidor VNC
O serviço VNC pode ser integrado ao sistema de virtualização, enquanto o hipervisor o conectará aos dispositivos emulados e nenhuma configuração adicional é necessária. Esta opção envolve sobrecarga significativa e não é suportada por todos os provedores - mesmo em uma implementação menos intensiva de recursos, quando uma abstração simplificada (framebuffer) é transferida para uma máquina virtual em vez de emular um dispositivo gráfico real. Às vezes, um servidor VNC se vincula a um servidor X em execução, mas este método é mais adequado para acessar uma máquina física, enquanto em uma máquina virtual cria uma série de dificuldades técnicas. A maneira mais fácil é instalar um servidor VNC com um servidor X embutido. Não requer dispositivos físicos (placa de vídeo, teclado e mouse) ou sua emulação por meio de um hipervisor e, portanto, é adequado para qualquer tipo de VPS.
Instalação e configuração
Precisamos de uma máquina virtual com Ubuntu Server 18.04 LTS na configuração padrão. Existem vários servidores VNC nos repositórios padrão desta distribuição: TightVNC , TigerVNC , x11vnc e outros. Escolhemos TigerVNC - um fork real não suportado pelo desenvolvedor TightVNC. Outros servidores são configurados de maneira semelhante. Você também precisa escolher um ambiente de desktop: em nossa opinião, o XFCE será a melhor opção devido aos requisitos relativamente baixos de recursos de computação. Os interessados podem instalar outro DE ou WM: tudo depende de preferências pessoais, mas a escolha do software afeta diretamente a necessidade de RAM e núcleos de computação.
A instalação do ambiente de 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 root é uma má ideia. Criar usuário e grupo:
sudo adduser vnc
Vamos adicionar o usuário ao grupo sudo para que ele possa resolver tarefas relacionadas à administração. Se não houver essa necessidade, você pode pular esta etapa:
sudo gpasswd -a vnc sudo
A próxima etapa é iniciar 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 (os extras são cortados). Se necessário, uma senha somente para visualização também é definida, ou seja, sem acesso a teclado e mouse. Os seguintes comandos são executados como o usuário vnc:
su - vnc
vncserver -localhost no
Por padrão, o protocolo RFB usa o intervalo de portas TCP 5900 a 5906 - esse é o assim chamado. portas de exibição, cada uma correspondendo a uma tela do servidor X. Nesse caso, as portas são associadas a telas de: 0 a: 6. A instância do servidor VNC que iniciamos está escutando na porta 5901 (tela: 1). Outras instâncias podem ser executadas 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 como a seguinte mensagem: "Killing Xtigervnc process ID 18105 ... success!".
Quando o TigerVNC é iniciado, ele executa o script ~ / .vnc / xstartup para definir os parâmetros de configuração. Vamos criar nosso próprio script, tendo previamente salvado uma cópia de backup do existente, se houver:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup
Uma sessão de 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ários parâmetros da área de trabalho gráfica: renderização de fonte, 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 (em nome do usuário vnc), pode se conectar com a senha definida anteriormente e ver a seguinte imagem:
Iniciando um serviço via systemd
Iniciar um servidor VNC manualmente não é adequado para uso em combate, portanto, configuraremos um serviço do sistema. Os comandos são executados como root (use sudo). Primeiro, vamos criar um novo arquivo de unidade para nosso servidor:
sudo nano /etc/systemd/system/vncserver@.service
O símbolo @ no nome permite que você passe um argumento para configurar o serviço. Em nosso caso, ele define a porta de vídeo VNC. Um arquivo de 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
Em seguida, você precisa notificar o systemd sobre o aparecimento de um novo arquivo e ativá-lo:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service
O número 1 no nome indica o número da tela.
Paramos o servidor VNC, o iniciamos como um serviço e verificamos 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 desktop
Nossa configuração não usa criptografia, portanto, os pacotes de rede podem ser interceptados por invasores. Além disso, as vulnerabilidades são freqüentemente encontradas em servidores VNC , portanto, você não deve abri-los para acesso pela Internet. Para se conectar com segurança no computador local, você precisa empacotar o tráfego em um túnel SSH e configurar o cliente VNC. No Windows, você pode usar um cliente SSH gráfico (por exemplo, PuTTY). Por segurança, TigerVNC no servidor escuta apenas localhost e não pode ser acessado diretamente em redes públicas:
sudo netstat -ap |more
No Linux, FreeBSD, OS X e outros sistemas operacionais semelhantes ao UNIX, o túnel do computador cliente é feito usando o utilitário ssh (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 liga a porta 5901 da conexão remota à porta 5901 no host local. A opção -C habilita a compactação e -N diz ao ssh para não executar um comando remoto. A opção -l especifica o login para login remoto.
Depois de 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 definida anteriormente para acessar o servidor VNC. Agora podemos nos comunicar com segurança por meio de um túnel criptografado com o ambiente gráfico de desktop XFCE no VPS. Na captura de tela, o principal utilitário está sendo executado no emulador de terminal para mostrar o consumo insignificante de recursos de computação pela máquina virtual. Então, tudo dependerá dos aplicativos do usuário.
Você pode instalar e configurar um servidor VNC no Linux em quase 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 no modo daemon (via /etc/rc.local) na inicialização do sistema ou sob demanda via inetd. Este último é interessante para a criação de configurações multiusuário. O superservidor da Internet iniciará o servidor VNC e associará o cliente a ele, e o servidor VNC criará uma nova tela e iniciará uma sessão. Para autenticação dentro dele, você pode usar um gerenciador de display gráfico (por exemplo, LightDM ), e após desconectar o cliente, a sessão será encerrada e todos os programas que trabalham com a tela serão encerrados.