如何在 Ubuntu 22.04 上安装和配置 VNC

介绍

虚拟网络计算,或VNC,是一个连接系统,允许您使用键盘和鼠标在远程服务器上与图形桌面环境进行交互。

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

前提条件

要完成本教程,您将需要:

  • 一个 Ubuntu 22.04 服务器具有非 root 管理用户和与 UFW 配置的防火墙。 要设置此功能,请遵循我们的 Ubuntu 22.04的初始服务器设置指南)。
  • 安装了 VNC 客户端的本地计算机。 您使用的 VNC 客户端必须支持 SSH 隧道上的连接:

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

默认情况下,Ubuntu 22.04 服务器不配备图形桌面环境或安装 VNC 服务器,因此您将开始安装这些服务器。

在本教程中,您将安装最新的 Xfce桌面环境和官方Ubuntu存储库可用的TightVNC包。Xfce和TightVNC都以轻量和速度而闻名,这将有助于确保VNC连接在更慢的互联网连接上保持平滑和稳定。

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

1sudo apt update

现在将 Xfce 与xfce4-goodies包一起安装,其中包含桌面环境的一些改进:

1sudo apt install xfce4 xfce4-goodies

在安装过程中,您可能会被要求选择Xfce的默认显示管理器。显示管理器是允许您通过图形界面选择和登录桌面环境的程序。当您连接到VNC客户端时,您只会使用Xfce,并且在这些Xfce会话中您已经登录为您的非根 Ubuntu用户。因此,对于本教程的目的,您的显示管理器选择并不相关。

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

1sudo apt install tightvncserver

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

1vncserver

您将被要求输入并验证密码以远程访问您的机器:

1[secondary_label Output]
2You will require a password to access your desktops.
3
4Password:
5Verify:

密码必须长6~8个字符,超过8个字符的密码将自动缩短。

一旦您验证了密码,您将有机会创建仅查看密码。使用仅查看密码登录的用户将无法使用鼠标或键盘控制VNC实例。

然后,该过程会为服务器创建必要的默认配置文件和连接信息,并在端口5901上启动默认服务器实例,该端口被称为显示端口,并被VNC称为:1

1[secondary_label Output]
2Would you like to enter a view-only password (y/n)? n
3xauth:  file /home/sammy/.Xauthority does not exist
4
5New 'X' desktop is your_hostname:1
6
7Creating default startup script /home/sammy/.vnc/xstartup
8Starting applications specified in /home/sammy/.vnc/xstartup
9Log file is /home/sammy/.vnc/your_hostname:1.log

请注意,如果您想要更改密码或添加只查看密码,您可以使用vncpasswd命令:

1vncpasswd

此时,VNC服务器已安装并运行,现在您将配置为启动Xfce,并通过图形界面向我们提供访问服务器。

步骤 2 – 配置 VNC 服务器

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

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

由于您将更改 VNC 服务器的配置方式,所以先用以下命令停止在端口 5901 上运行的 VNC 服务器实例:

1vncserver -kill :1

输出将看起来像这样,尽管你会看到不同的 PID:

1[secondary_label Output]
2Killing Xtightvnc process ID 17648

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

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

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

1nano ~/.vnc/xstartup

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

1[label ~/.vnc/xstartup]
2#!/bin/bash
3xrdb $HOME/.Xresources
4startxfce4 &

第一行是 shebang。在 *nix 平台上可执行的简单文本文件中,一个 shebang 告诉系统该将该文件传输给哪个解释器执行。

文件中的第一个命令,xrdb $HOME/.Xresources,告诉VNC的GUI框架读取服务器用户的.Xresources文件. `.Xresources'是用户可以对图形桌面的某些设置进行更改的地方,如终端颜色,方针主题和字体渲染。

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

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

1chmod +x ~/.vnc/xstartup

然后重新启动 VNC 服务器:

1vncserver -localhost

请注意,这次命令包括-localhost选项,该选项将VNC服务器连接到您的服务器的循环返回界面,这将导致VNC只允许来自该服务器的连接。

在下一步中,您将在本地机器和服务器之间建立一个SSH隧道,基本上欺骗VNC认为本地机器的连接起源于您的服务器。

你会看到类似于此的输出:

1[secondary_label Output]
2New 'X' desktop is your_hostname:1
3
4Starting applications specified in /home/sammy/.vnc/xstartup
5Log file is /home/sammy/.vnc/your_hostname:1.log

有了配置,您已经准备好从本地机器连接到VNC服务器。

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

要安全连接到您的服务器,您将建立一个SSH隧道,然后告诉您的VNC客户端使用该隧道连接,而不是直接连接。

在本地计算机上创建一个 SSH 连接,可安全地向 VNC 的本地最强连接进行转发,您可以通过 Linux 或 macOS 的终端使用以下ssh命令:

1[environment local]
2ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

以下是这个ssh命令的选项是什么意思:

  • -L 59000:localhost:5901: 按定义为 your_server_ip 的 switch 指定本地计算机上的某个端口(59000)要转发到指定主机和端口的目的地服务器(localhost:5901,意思是目标服务器上的端口 5901)。 请注意,您指定的本地端口有点任意;只要端口尚未连接到另一个服务,您可以将其用作您的隧道的转发端口。
  • -C: 这个标志允许压缩,可以帮助减少资源消耗并加速工作。
  • -N: 此选项意味着您不想执行任何远程命令。 此设置是当您只想转发端

<$>[注] :此命令建立了一个SSH隧道,将信息从VNC服务器上的端口5901转发到本地机器上的端口59000通过每个机器的端口22,即SSH的默认端口。

这比简单地打开服务器的防火墙来允许连接到端口5901更安全,因为这将允许任何人通过VNC访问您的服务器。

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

Right-click on top bar to reveal Change Settings option

在 PuTTY 重组窗口左侧的树菜单中找到 连接 分支。 扩展 SSH 分支并单击 隧道 。 在控制 SSH 端口转发**的 ** 选项屏幕上,如下,输入 59000 作为 源端口localhost:5901 作为 目的地 :

Example PuTTY SSH tunnel configuration

然后点击添加按钮,然后点击应用按钮来实现隧道。

一旦隧道运行,请使用VNC客户端连接到Localhost:59000。您将被要求使用您在步骤 1中设置的密码进行身份验证。

一旦连接,你会看到默认的 Xfce 桌面. 它应该看起来像这样:

VNC connection to Ubuntu 22.04 server with the Xfce desktop environment

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

File Manager via VNC connection to Ubuntu 22.04

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

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

步骤 4 – 运行 VNC 作为系统服务

通过设置 VNC 服务器以作为 systemd 服务运行,您可以根据需要启动、停止和重新启动它,就像任何其他服务一样。

首先,创建一个名为/etc/systemd/system/[email protected]的新单元文件:

1sudo nano /etc/systemd/system/[email protected]

名称末尾的@符号将允许我们通过您可以在服务配置中使用的参数,您将使用此符号来指定您想要在管理服务时使用的VNC显示端口。

请确保更改 用户 , , WorkingDirectory 和用户名值中的 PIDFILE 值以匹配您的用户名:

 1[label  /etc/systemd/system/[email protected]]
 2[Unit]
 3Description=Start TightVNC server at startup
 4After=syslog.target network.target
 5
 6[Service]
 7Type=forking
 8User=sammy
 9Group=sammy
10WorkingDirectory=/home/sammy
11
12PIDFile=/home/sammy/.vnc/%H:%i.pid
13ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
14ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
15ExecStop=/usr/bin/vncserver -kill :%i
16
17[Install]
18WantedBy=multi-user.target

ExecStartPre命令停止了VNC,如果它已经运行了,ExecStart命令启动了VNC,并将颜色深度设置为24位颜色,分辨率为1280x800。

保存并关闭文件。

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

1sudo systemctl daemon-reload

启用单元文件:

1sudo systemctl enable [email protected]

@符号后面的1表示该服务应该显示的显示号码,在这种情况下,如在步骤2中讨论的那样,默认的:1

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

1vncserver -kill :1

然后像你开始任何其他系统d 服务一样启动它:

1sudo systemctl start vncserver@1

你可以验证它是从这个命令开始的:

1sudo systemctl status vncserver@1

如果它开始正确,输出应该是这样的:

 1[secondary_label Output]
 2 vncserver@1.service - Start TightVNC server at startup
 3     Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
 4     Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago
 5    Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
 6    Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS)
 7   Main PID: 97103 (Xtightvnc)
 8      Tasks: 77 (limit: 4665)
 9     Memory: 146.7M
10        CPU: 4.459s
11     CGroup: /system.slice/system-vncserver.slice/vncserver@1.service
12. . .

您的 VNC 服务器现在随时准备使用,您可以像任何其他 systemd 服务一样使用 systemctl 命令来管理它。

要重新连接,请重新启动您的 SSH 隧道:

1[environment local]
2ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

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

结论

你现在有一个安全的VNC服务器,在你的Ubuntu 22.04服务器上运行,现在你将能够管理你的文件,软件和设置,使用用户友好的图形界面,你将能够远程运行图形软件,如Web浏览器。

Published At
Categories with 技术
comments powered by Disqus