具有图形界面的Linux上的VPS:在Ubuntu 18.04上运行VNC服务器



一些用户租用了相对便宜的Windows VPS来运行远程桌面服务。在Linux上也可以做到这一点,而无需在数据中心中放置自己的硬件或租用专用服务器。有人需要熟悉的图形环境进行测试和开发,或者需要具有宽带宽的远程桌面才能在移动设备上工作。基于远程帧缓冲区(RFB)协议的虚拟网络计算(VNC)有很多用途。在简短的文章中,我们将向您展示如何使用任何虚拟机监控程序在虚拟机上对其进行配置。



目录:



选择VNC服务器

安装和配置

通过systemd启动服务

连接到桌面



选择VNC服务器



可以将VNC服务内置到虚拟化系统中,管理程序会将其连接到仿真设备,而无需其他配置。此选项涉及大量开销,并非所有提供程序都支持-即使在资源消耗较少的实现中,当将简化的抽象(帧缓冲区)传输到虚拟机而不是模拟真实的图形设备时,该选项也是如此。有时VNC服务器绑定到正在运行的X服务器,但是此方法更适合访问物理机,而在虚拟机上却带来许多技术难题。最简单的方法是安装带有嵌入式X服务器的VNC服务器。它不需要物理设备(视频适配器,键盘和鼠标)或使用管理程序进行仿真,因此适用于任何类型的VPS。



安装与配置



我们需要一台默认配置为Ubuntu Server 18.04 LTS的虚拟机。此发行版的标准存储库中有多个VNC服务器:TightVNCTigerVNCx11vnc等。我们选择了TigerVNC-TightVNC开发人员不支持的实际fork。其他服务器以类似的方式配置。您还需要选择一个桌面环境:我们认为,由于对计算资源的要求相对较低,XFCE将是最佳选择。有兴趣的人可以安装其他DE或WM:这完全取决于个人喜好,但是软件的选择直接影响对RAM和计算核心的需求。



图片




使用以下命令完成具有所有依赖项的桌面环境的安装:



sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils


接下来,您需要安装VNC服务器:



sudo apt-get install tigervnc-standalone-server tigervnc-common


以root身份运行它不是一个好主意。创建用户和组:



sudo adduser vnc






让我们将用户添加到sudo组中,以便他可以解决与管理相关的任务。如果没有这种需要,则可以跳过此步骤:



sudo gpasswd -a vnc sudo


下一步是使用vnc用户特权启动VNC服务器,以在〜/ .vnc /目录中创建安全密码和配置文件。密码的长度可以是6到8个字符(多余的将被截断)。如有必要,还设置了仅查看密码,即 无需使用键盘和鼠标。以下命令以vnc用户身份执行:



su - vnc
vncserver -localhost no




默认情况下,RFB协议使用TCP端口范围5900到5906-这就是所谓的。显示端口,每个端口对应一个X服务器屏幕。在这种情况下,端口与屏幕之间的关联:0到:6。我们启动的VNC服务器实例正在监听端口5901(屏幕:1)。其他实例可以在具有以下屏幕的其他端口上运行:2 ,: 3,等等。在进行进一步配置之前,您需要停止服务器:



vncserver -kill :1


该命令应显示类似以下消息的内容:“杀死Xtigervnc进程ID 18105 ...成功!”。



TigerVNC启动时,它将运行〜/ .vnc / xstartup脚本来设置配置参数。让我们创建自己的脚本,之前已保存了现有脚本的备份副本(如果存在):



mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup


XFCE桌面环境会话由以下xstartup脚本启动:



#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &


VNC需要xrdb命令才能读取主目录中的.Xresources文件。用户可以在其中定义图形桌面的各种参数:字体渲染,终端颜色,光标主题等。必须使脚本可执行:



chmod 755 ~/.vnc/xstartup


这样就完成了VNC服务器配置。如果使用vncserver -localhost no命令(代表vnc用户)运行它,则可以使用先前指定的密码进行连接,并看到下图:





通过systemd启动服务



手动启动VNC服务器不适合战斗使用,因此我们将配置系统服务。命令以root身份执行(使用sudo)。首先,让我们为服务器创建一个新的单元文件:



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


名称中的@符号允许您传递参数来配置服务。在我们的情况下,它设置了VNC显示端口。单位文件包括以下部分:



[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


然后,您需要通知systemd新文件的外观并激活它:



sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service


名称中的数字1表示屏幕编号。



我们停止VNC服务器,将其作为服务启动并检查状态:



#    vnc 
vncserver -kill :1


#   
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1


如果服务正在运行,我们应该得到类似的信息。





桌面连接



我们的配置不使用加密,因此攻击者可以拦截网络数据包。此外,VNC服务器中经常存在漏洞,因此您不应打开这些漏洞以从Internet访问。要在本地计算机上安全连接,您需要将流量打包到SSH隧道中,然后配置VNC客户端。在Windows上,您可以使用图形SSH客户端(例如PuTTY)。为了安全起见,服务器上的TigerVNC仅侦听localhost,不能从公共网络直接访问:




sudo netstat -ap |more




在Linux,FreeBSD,OS X和其他类似UNIX的操作系统上,使用ssh实用程序(必须在VNC服务器上运行sshd)完成来自客户端计算机的隧道:



ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip


-L选项将远程连接的端口5901绑定到本地主机上的端口5901。 -C选项启用压缩,-N告诉ssh不要运行远程命令。 -l选项指定用于远程登录的登录。



在本地计算机上配置隧道之后,您需要启动VNC客户端并使用先前设置的密码建立与主机127.0.0.1:5901(localhost:5901)的连接,以访问VNC服务器。现在,我们可以通过加密的隧道与VPS上的XFCE图形桌面环境进行安全通信。在屏幕截图中,top实用程序正在终端仿真器中运行,以显示虚拟机对计算资源的消耗不大。然后,一切将取决于用户应用程序。





您可以在几乎所有VPS的Linux上安装和配置VNC服务器。这不需要通过仿真视频适配器或购买商业软件许可证进行昂贵且资源密集的配置。除了我们已经考虑过的系统服务选项之外,还有其他一些选择:在系统引导时或通过inetd按需以守护程序模式(通过/etc/rc.local)启动。后者对于创建多用户配置很有趣。Internet超级服务器将启动VNC服务器并将客户端与其关联,并且VNC服务器将创建一个新屏幕并开始会话。为了在其中进行身份验证,您可以使用图形显示管理器(例如LightDM),并且在断开客户端连接后,将关闭该会话,并终止所有与该屏幕配合使用的程序。






All Articles