介绍
虚拟网络计算或 VNC 是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。对于还不熟悉命令行的用户来说,它使管理远程服务器上的文件、软件和设置变得更加容易。
在本指南中,您将在 Ubuntu 18.04 服务器上设置 VNC 服务器并通过 SSH 隧道安全地连接到它。您将使用TightVNC,这是一个快速且轻便的远程控制包。此选择将确保我们的 VNC 连接即使在较慢的互联网连接上也能流畅稳定。
先决条件
要完成本教程,您需要:
- 按照Ubuntu 18.04 初始服务器设置指南设置一台 Ubuntu 18.04 服务器,包括一个 sudo 非 root 用户和一个防火墙。
- 安装了 VNC 客户端的本地计算机,支持通过 SSH 隧道进行 VNC 连接。
步骤 1 — 安装桌面环境和 VNC 服务器
默认情况下,Ubuntu 18.04 服务器没有安装图形桌面环境或 VNC 服务器,因此我们将从安装它们开始。具体来说,我们将为最新的Xfce桌面环境和官方 Ubuntu 存储库中提供的 TightVNC 软件包安装软件包。
在您的服务器上,更新您的软件包列表:
- sudo apt update
现在在您的服务器上安装 Xfce 桌面环境:
- sudo apt install xfce4 xfce4-goodies
安装完成后,安装 TightVNC 服务器:
- sudo apt install tightvncserver
安装后完成VNC服务器的初始配置,使用vncserver
命令设置安全密码并创建初始配置文件:
- vncserver
系统会提示您输入并验证密码以远程访问您的机器:
OutputYou will require a password to access your desktops.
Password:
Verify:
密码长度必须介于 6 到 8 个字符之间。超过 8 个字符的密码将被自动截断。
验证密码后,您将可以选择创建仅供查看的密码。使用仅查看密码登录的用户将无法使用鼠标或键盘控制 VNC 实例。如果您想向使用 VNC 服务器的其他人演示某些内容,这是一个有用的选项,但这不是必需的。
然后该过程为服务器创建必要的默认配置文件和连接信息:
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
现在让我们配置 VNC 服务器。
步骤 2 — 配置 VNC 服务器
VNC 服务器在启动时需要知道要执行哪些命令。具体来说,VNC 需要知道它应该连接到哪个图形桌面。
这些命令位于您的主目录下xstartup
的.vnc
文件夹中调用的配置文件中。启动脚本是vncserver
在上一步中运行时创建的,但我们将创建自己的脚本来启动 Xfce 桌面。
首次设置 VNC 时,它会在端口 上启动默认服务器实例5901
。此端口称为显示端口,VNC 将其称为:1
. VNC 可以在其他显示端口上启动多个实例,例如:2
、:3
等。
因为我们将改变 VNC 服务器的配置方式,首先5901
使用以下命令停止在端口上运行的 VNC 服务器实例:
- vncserver -kill :1
输出应如下所示,但您会看到不同的 PID:
OutputKilling Xtightvnc process ID 17648
在修改xstartup
文件之前,请备份原始文件:
- mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
现在创建一个新xstartup
文件并在文本编辑器中打开它:
- nano ~/.vnc/xstartup
每当您启动或重新启动 VNC 服务器时,此文件中的命令都会自动执行。如果尚未启动,我们需要 VNC 来启动我们的桌面环境。将这些命令添加到文件中:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
文件中的第一个命令xrdb $HOME/.Xresources
告诉 VNC 的 GUI 框架读取服务器用户的.Xresources
文件。.Xresources
是用户可以更改图形桌面的某些设置的地方,例如终端颜色、光标主题和字体渲染。第二个命令告诉服务器启动 Xfce,您可以在其中找到轻松管理服务器所需的所有图形软件。
为了确保 VNC 服务器能够正确使用这个新的启动文件,我们需要使其可执行。
- sudo chmod +x ~/.vnc/xstartup
现在,重新启动 VNC 服务器。
- vncserver
你会看到类似这样的输出:
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
配置到位后,让我们从本地机器连接到服务器。
步骤 3 — 安全连接 VNC 桌面
VNC 本身在连接时不使用安全协议。我们将使用 SSH 隧道安全地连接到我们的服务器,然后告诉我们的 VNC 客户端使用该隧道而不是建立直接连接。
在您的本地计算机上创建一个 SSH 连接,以安全地转发到localhost
VNC的连接。您可以使用以下命令通过 Linux 或 macOS 上的终端执行此操作:
- ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
该-L
开关指定的端口绑定。在这种情况下,我们将5901
远程连接的端口绑定到5901
本地机器上的端口。该-C
开关启用压缩,而-N
开关告诉ssh
我们不希望执行远程命令。该-l
开关指定远程登录名。
请记住将sammy
和替换your_server_ip
为您服务器的 sudo 非 root 用户名和 IP 地址。
如果您使用的是图形 SSH 客户端,例如 PuTTY,请your_server_ip
用作连接 IP,并localhost:5901
在程序的 SSH 隧道设置中设置为新的转发端口。
隧道运行后,使用 VNC 客户端连接到localhost:5901
. 系统将提示您使用您在步骤 1 中设置的密码进行身份验证。
连接后,您将看到默认的 Xfce 桌面。它应该是这样的:
您可以使用文件管理器或从命令行访问主目录中的文件,如下所示:
CTRL+C
在您的终端按下以停止 SSH 隧道并返回到您的提示。这也会断开您的 VNC 会话。
接下来让我们将 VNC 服务器设置为服务。
步骤 4 — 将 VNC 作为系统服务运行
接下来,我们将 VNC 服务器设置为 systemd 服务,以便我们可以像任何其他服务一样根据需要启动、停止和重新启动它。这也将确保 VNC 在您的服务器重新启动时启动。
首先,/etc/systemd/system/[email protected]
使用您喜欢的文本编辑器创建一个名为的新单元文件:
- sudo nano /etc/systemd/system/[email protected]
@
名称末尾的符号将让我们传入一个可以在服务配置中使用的参数。我们将使用它来指定我们在管理服务时要使用的 VNC 显示端口。
将以下行添加到文件中。请务必更改User、Group、WorkingDirectory的值以及PIDFILE值中的用户名以匹配您的用户名:
[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 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
ExecStartPre
如果 VNC 已经在运行,该命令会停止它。该ExecStart
命令启动 VNC 并将颜色深度设置为 24 位颜色,分辨率为 1280×800。您也可以修改这些启动选项以满足您的需要。
保存并关闭文件。
接下来,让系统知道新的单元文件。
- sudo systemctl daemon-reload
启用单元文件。
- sudo systemctl enable [email protected]
在1
以下的@
符号表示,其显示编号的服务应该出现过,在这种情况下,默认:1
为在步骤2中进行了讨论..
如果 VNC 服务器的当前实例仍在运行,请停止它。
- vncserver -kill :1
然后像启动任何其他 systemd 服务一样启动它。
- sudo systemctl start vncserver@1
您可以使用以下命令验证它是否启动:
- sudo systemctl status vncserver@1
如果它正确启动,输出应如下所示:
Output● [email protected] - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/[email protected]; indirect; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 18:13:53 UTC; 2min 14s ago
Process: 22322 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Process: 22316 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
Main PID: 22330 (Xtightvnc)
...
当您重新启动机器时,您的 VNC 服务器现在将可用。
再次启动您的 SSH 隧道:
- ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
然后使用您的 VNC 客户端软件建立新连接localhost:5901
以连接到您的机器。
结论
您现在已经在 Ubuntu 18.04 服务器上启动并运行了一个安全的 VNC 服务器。现在,您将能够使用易于使用且熟悉的图形界面来管理您的文件、软件和设置,并且您将能够远程运行图形软件,如 Web 浏览器。