介绍

虚拟网络计算,或 VNC,是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。对于尚不熟悉命令行的用户,它可以更轻松地管理远程服务器上的文件、软件和设置。

在本指南中,您将在 Ubuntu 22.04 服务器上使用 TightVNC 设置 VNC 服务器,并通过 SSH 隧道安全地连接到它。然后,您将使用本地计算机上的 VNC 客户端程序通过图形桌面环境与您的服务器进行交互。

先决条件

要完成本教程,您需要:

  • 一台 Ubuntu 22.04 服务器,具有非 root 管理用户和配置了 UFW 的防火墙。要进行设置,请按照我们的 Ubuntu 22.04 初始服务器设置指南。

  • 安装了 VNC 客户端的本地计算机。您使用的 VNC 客户端必须支持通过 SSH 隧道的连接:

  • 在 Windows 上,您可以使用 TightVNC、RealVNC 或 [UltraVNC](https://www. uvnc.com/)。

  • 在 macOS 上,您可以使用内置的 屏幕共享 程序,也可以使用跨屏像 RealVNC 这样的平台应用程序。

  • 在 Linux 上,您可以从许多选项中进行选择,包括 vinagrekrdc、RealVNC 或 [TightVNC](https://www.tightvnc.com /)。

步骤 1 — 安装桌面环境和 VNC 服务器

默认情况下,Ubuntu 22.04 服务器没有安装图形桌面环境或 VNC 服务器,因此您将从安装它们开始。

在选择哪种 VNC 服务器和桌面环境时,您有很多选择。在本教程中,您将为最新的 Xfce 桌面环境和官方 Ubuntu 存储库中提供的 TightVNC 包安装包。 Xfce 和 TightVNC 都以轻量和快速而闻名,这将有助于确保 VNC 连接即使在较慢的互联网连接上也能流畅稳定。

使用 SSH 连接到您的服务器后,更新您的软件包列表:

sudo apt 更新

现在安装 Xfce 和 xfce4-goodies 包,其中包含一些桌面环境的增强功能:

sudo apt install xfce4 xfce4-goodies

在安装过程中,可能会提示您为 Xfce 选择默认显示管理器。显示管理器是一个程序,它允许您通过图形界面选择并登录到桌面环境。只有在连接 VNC 客户端时,您才会使用 Xfce,并且在这些 Xfce 会话中,您已经以非 root Ubuntu 用户身份登录。因此,出于本教程的目的,您选择的显示管理器并不相关。选择其中一个,然后按“ENTER”。

安装完成后,安装 TightVNC 服务器:

sudo apt install tightvncserver

接下来,运行 vncserver 命令设置 VNC 访问密码,创建初始配置文件,并启动 VNC 服务器实例:

vnc服务器

系统将提示您输入并验证密码以远程访问您的机器:

输出您将需要密码才能访问您的桌面。

密码:
核实:

密码长度必须介于六到八个字符之间。超过 8 个字符的密码将被自动截断。

验证密码后,您可以选择创建仅供查看的密码。使用仅查看密码登录的用户将无法使用鼠标或键盘控制 VNC 实例。如果您想使用您的 VNC 服务器向其他人演示某些内容,这是一个有用的选项,但这不是必需的。

然后该过程为服务器创建必要的默认配置文件和连接信息。此外,它会在端口“5901”上启动一个默认服务器实例。此端口称为_显示端口_,VNC 将其称为:1。 VNC 可以在其他显示端口上启动多个实例,:2 表示端口 5902,:3 表示5903,依此类推:

输出您想输入一个仅供查看的密码(y/n)吗? n
xauth: 文件 /home/sammy/.Xauthority 不存在

新的“X”桌面是 your_hostname:1

创建默认启动脚本 /home/sammy/.vnc/xstartup
启动 /home/sammy/.vnc/xstartup 中指定的应用程序
日志文件是 /home/sammy/.vnc/your_hostname:1.log

请注意,如果您想更改密码或添加仅供查看的密码,可以使用 vncpasswd 命令进行:

vncpasswd

至此,VNC 服务器已安装并运行。现在您将配置它以启动 Xfce 并让我们通过图形界面访问服务器。

步骤 2 — 配置 VNC 服务器

VNC 服务器在启动时需要知道要运行哪些命令。具体来说,VNC 需要知道它应该连接到哪个图形桌面环境。

VNC 服务器在启动时运行的命令位于主目录下 .vnc 文件夹中名为 xstartup 的配置文件中。启动脚本是在上一步中运行 vncserver 命令时创建的,但您将创建自己的脚本来启动 Xfce 桌面。

因为您将要更改 VNC 服务器的配置方式,所以首先使用以下命令停止在端口“5901”上运行的 VNC 服务器实例:

vncserver -kill :1

输出将如下所示,尽管您会看到不同的 PID:

OutputKilling Xtightvnc 进程 ID 17648

在修改 xstartup 文件之前,请备份原始文件:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

现在创建一个新的 xstartup 文件并在文本编辑器中打开它,例如 nano:

纳米 ~/.vnc/xstartup

然后将以下行添加到文件中:

~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources
启动xfce4 &

第一行是 shebang。在 *nix 平台上的可执行纯文本文件中,shebang 告诉系统将该文件传递给哪个解释器执行。在这种情况下,您将文件传递给 Bash 解释器。这将允许每个连续的行按顺序作为命令执行。

文件中的第一个命令 xrdb $HOME/.Xresources 告诉 VNC 的 GUI 框架读取服务器用户的 .Xresources 文件。 .Xresources 是用户可以更改图形桌面的某些设置的地方,例如终端颜色、光标主题和字体渲染。第二个命令告诉服务器启动 Xfce。每当您启动或重新启动 VNC 服务器时,这些命令都会自动执行。

添加这些行后保存并关闭文件。如果您使用了 nano,请按 CTRL + XY,然后按 ENTER

为确保 VNC 服务器能够正确使用这个新的启动文件,您需要使其可执行:

chmod +x ~/.vnc/xstartup

然后重启VNC服务器:

vncserver -本地主机

请注意,这一次该命令包含 -localhost 选项,它将 VNC 服务器绑定到服务器的环回接口。这将导致 VNC 仅允许来自安装它的服务器的连接。

在下一步中,您将在本地计算机和服务器之间建立 SSH 隧道,实质上是在诱使 VNC 认为来自本地计算机的连接源自您的服务器。此策略将围绕 VNC 添加额外的安全层,因为唯一能够访问它的用户是那些已经对您的服务器具有 SSH 访问权限的用户。

你会看到类似这样的输出:

OutputNew 'X' 桌面是 your_hostname:1

启动 /home/sammy/.vnc/xstartup 中指定的应用程序
日志文件是 /home/sammy/.vnc/your_hostname:1.log

配置到位后,您就可以从本地计算机连接到 VNC 服务器了。

步骤 3 — 安全连接到 VNC 桌面

VNC 本身在连接时不使用安全协议。为了安全地连接到您的服务器,您将建立一个 SSH 隧道,然后告诉您的 VNC 客户端使用该隧道进行连接,而不是进行直接连接。

在本地计算机上创建一个 SSH 连接,安全地转发到 VNC 的 localhost 连接。您可以通过 Linux 或 macOS 上的终端使用以下 ssh 命令执行此操作:

ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

以下是 ssh 命令选项的含义:

  • -L 59000:localhost:5901: -L 开关指定本地计算机上的给定端口 (59000) 将转发到目标服务器上的给定主机和端口 (localhost:5901 ,表示目标服务器上的端口 5901,定义为 your_server_ip)。请注意,您指定的本地端口有些随意;只要该端口尚未绑定到其他服务,您就可以将其用作隧道的转发端口。

  • -C:此标志启用压缩,有助于最大限度地减少资源消耗并加快处理速度。

  • -N:这个选项告诉ssh你不想执行任何远程命令。当您只想转发端口时,此设置很有用。

  • -l sammy your_server_ip:-l 开关可让您在连接到服务器后指定要登录的用户。确保将 sammyyour_server_ip 替换为非 root 用户的名称和服务器的 IP 地址。

注意:此命令建立一个 SSH 隧道,将信息从 VNC 服务器上的端口 5901 通过每台机器上的端口 22 转发到本地机器上的端口 59000,这是 SSH 的默认端口。假设您遵循先决条件 Ubuntu 22.04 的初始服务器设置指南,您将添加一个 UFW允许通过 OpenSSH 连接到您的服务器的规则。

这比简单地打开服务器的防火墙以允许连接到端口“5901”更安全,因为这将允许任何人通过 VNC 访问您的服务器。通过通过 SSH 隧道进行连接,您将 VNC 访问限制为对已经具有 SSH 访问服务器的计算机的访问权限。

如果您使用 PuTTY 连接到您的服务器,您可以通过右键单击终端窗口的顶部栏,然后单击 Change Settings... 选项来创建 SSH 隧道:

右击顶部栏显示更改设置选项

在 PuTTY Reconfiguration 窗口左侧的树形菜单中找到 Connection 分支。展开 SSH 分支并单击 Tunnels。在 Options controling SSH port forwarding 屏幕上,输入 59000 作为 Source Portlocalhost:5901 作为 Destination,如下所示:

PuTTY SSH隧道配置示例

然后点击Add按钮,再点击Apply按钮实现隧道。

隧道运行后,使用 VNC 客户端连接到 localhost:59000。系统将提示您使用您在步骤 1 中设置的密码进行身份验证。

连接后,您将看到默认的 Xfce 桌面。它应该看起来像这样:

Xfce桌面环境下VNC连接Ubuntu 22.04服务器

您可以使用文件管理器或从命令行访问主目录中的文件,如下所示:

文件管理器通过VNC连接Ubuntu 22.04

在本地终端中按 CTRL+C 以停止 SSH 隧道并返回到提示符。这也会断开您的 VNC 会话。

现在您可以将 VNC 服务器配置为作为 systemd 服务运行。

第 4 步 — 将 VNC 作为系统服务运行

通过将 VNC 服务器设置为作为 systemd 服务运行,您可以根据需要启动、停止和重新启动它,就像任何其他服务一样。您还可以使用 systemd 的管理命令来确保 VNC 在您的服务器启动时启动。

首先,创建一个名为 /etc/systemd/system/vncserver@.service 的新单元文件:

Sudonano / et c / syste md / syste m / vcser@。服务

名称末尾的 @ 符号将让我们传入一个您可以在服务配置中使用的参数。您将使用它来指定管理服务时要使用的 VNC 显示端口。

将以下行添加到文件中。请务必更改 UserGroupWorkingDirectory 的值以及 PIDFILE 值中的用户名以匹配您的用户名:

/etc/systemd/system/vncserver@.service

[单元]
说明u003d启动时启动 TightVNC 服务器
Afteru003dsyslog.target network.target

[服务]
类型u003d分叉
用户u003dsammy
组u003d萨米
工作目录u003d/home/sammy

PIDFileu003d/home/sammy/.vnc/%H:%i.pid
ExecStartPreu003d-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStartu003d/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStopu003d/usr/bin/vncserver -kill :%i

[安装]
WantedByu003d多用户.target

ExecStartPre 命令会停止 VNC(如果它已经在运行)。 ExecStart 命令启动 VNC 并将颜色深度设置为 24 位颜色,分辨率为 1280x800。您也可以修改这些启动选项以满足您的需要。另外,请注意 ExecStart 命令再次包含 -localhost 选项。

保存并关闭文件。

接下来,让系统知道新的单元文件:

sudo systemctl daemon-reload

启用单元文件:

sudo systemctl 启用 vncserver@1.service

@ 后面的 1 表示服务应该出现在哪个显示编号上,在这种情况下默认为 :1,如步骤 2 中所述。

如果 VNC 服务器的当前实例仍在运行,则停止它:

vncserver -kill :1

然后像启动任何其他 systemd 服务一样启动它:

sudo systemctl start vncserver@1

您可以使用以下命令验证它是否启动:

sudo systemctl status vncserver@1

如果它正确启动,输出应如下所示:

输出● vncserver@1.service - 在启动时启动 TightVNC 服务器
已加载:已加载(/etc/systemd/system/vncserver@.service;已启用;供应商预设:已启用)
活动:自 2022 年 4 月 18 日星期一 16:57:26 UTC 起活动(运行); 20 年代前
进程:97088 ExecStartPreu003d/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (codeu003dexited, statusu003d2)
进程:97092 ExecStartu003d/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (codeu003dexited, statusu003d0/SUCCESS)
主 PID:97103 (Xtightvnc)
任务:77(限制:4665)
内存:146.7M
CPU:4.459s
CGroup:/system.slice/system-vncserver.slice/vncserver@1.service
. . .

您的 VNC 服务器现在可以在服务器启动时使用,您可以使用 [systemctl 命令](https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to -manage-systemd-services-and-units)与任何其他 systemd 服务一样。

但是,在客户端不会有任何区别。要重新连接,请再次启动 SSH 隧道:

ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

然后使用您的 VNC 客户端软件与 localhost:59000 建立新连接以连接到您的服务器。

结论

您现在已经在 Ubuntu 22.04 服务器上启动并运行了一个安全的 VNC 服务器。现在,您将能够使用用户友好的图形界面管理文件、软件和设置,并且能够远程运行 Web 浏览器等图形软件。

Logo

更多推荐