很多时候,我们发现自己需要远程访问Linux 服务器。如果我们特别需要访问 Linux GUI,那么我们可以在 Linux 上设置 VNC 服务器,以便我们控制 GUI。
在本教程中,我们将在 Ubuntu 22.04 上安装 TightVNC 服务器并通过 Windows、MacOS 和 Linux 机器访问它。
我们假设一个安全的网络环境,我们的服务器无法被外界访问,并且密码足够强大。但是,我们还将介绍在需要额外安全性的情况下使用 SSH 隧道。
1. VNC 简介
VNC(虚拟网络计算)是一种流行的图形桌面共享系统。它允许用户使用 RFB(远程帧缓冲区)协议控制他们的系统,而无需物理访问。
VNC 使用户能够使用客户端机器的键盘和鼠标事件无缝地读取和共享文件、更改设置以及在服务器上执行命令。
要建立远程连接,我们需要服务器和客户端。有许多 VNC 解决方案可供选择,例如 Vino、RealVNC、TightVNC和 TigerVNC。
2. VNC 服务器的安装
我们将安装 TightVNC 服务器,因为它是开源的、维护活跃的、轻量级的。此外,它还提供密码保护、加密和扩展等众多功能。
2.1 安装桌面环境
在安装 TightVNC 服务器之前,我们应该确保我们的包管理器是最新的:
sudo apt update && sudo apt upgrade -y
Hit:1 http://pk.archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease
…
接下来,我们将在 Ubuntu 服务器上安装桌面环境,因为它默认不附带桌面环境。为此,让我们安装 XFCE 桌面环境以及 xfce -goodies GUI 增强功能:
sudo apt install xfce4 xfce4-goodies
Reading package lists... Done
Building dependency tree... Done
…
这样我们的桌面环境就安装成功了。
2.2 安装 TightVNC 服务器
接下来,让我们安装 TightVNC 服务器:
sudo apt install tightvncserver -y
最后我们的TightVNC服务器就安装成功了。
3. VNC 服务器的配置
现在,让我们配置我们的 VNC 服务器以便从客户端机器访问它。
3.1 设置 VNC 服务器密码
首先,我们将为 VNC 服务器设置密码。为此,我们运行vncpasswd命令并设置一个长度为 6 到 8 个字符的安全密码:
$ vncpasswd
Using password file /home/baeldung/.vnc/passwd
Password:
Verify:
Would you like to enter a view-only password (y/n)? N
接下来,我们将看到一个提示,询问我们是否要设置用于访问服务器的只读密码。设置此密码取决于我们的需求。
在我们的例子中,我们想要提供对服务器的完全访问权限,因此我们输入N。
3.2 创建服务器配置文件
接下来,让我们运行vncserver命令来启动 TightVNC 服务器并创建其初始配置文件:
vncserver
New 'X' desktop is baeldung-linux:1
Starting applications specified in /home/baeldung/.vnc/xstartup
Log file is /home/baeldung/.vnc/baeldung-linux:1.log
在输出中,我们可以看到主机名后面有一个数字 (:1),即显示端口。此显示端口表示服务器实例正在运行的端口。默认情况下,VNC 服务器侦听 TCP 端口 5900,因此这个 :1 显示端口表示服务器实例正在端口 5901(5900 + 1)上运行。
VNC 允许我们通过运行相同的命令在不同的显示端口上创建多个 VNC 服务器实例。
现在,让我们终止该服务器实例来执行一些服务器配置:
vncserver -kill :1 -force
Killing Xtightvnc process ID 6111
我们可以使用此命令在不需要时通过相应地修改显示端口号来终止在特定显示端口上运行的任何服务器实例。
3.3 修改配置文件
接下来,我们希望 VNC 服务器每次运行时都使用 XFCE 桌面环境。为此,我们将在~/.vnc/xstartup文件中添加startxfce4 &行。修改文件后,我们可以使用 cat 命令验证其内容:
echo "startxfce4 &" >> ~/.vnc/xstartup
cat ~/.vnc/xstartup
!/bin/sh
xrdb "$HOME/.Xresources"
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession
startxfce4 &
当 VNC 会话启动时,xstartup文件会自动执行。
此外,我们可以配置其他组件或应用程序(例如文件管理器),以在此文件中使用我们的 VNC 服务器启动。
修改xstartup文件后,我们将使用chmod命令将其权限更改为可执行:
chmod +x ~/.vnc/xstartup
3.4 启动 VNC 服务器
最后,让我们启动我们的 TightVNC 服务器实例:
vncserver
New 'X' desktop is baeldung-linux:1
...
我们必须记下我们的服务器实例的显示端口(:1)和我们服务器的 IP 地址以供以后使用。
我们已经在 Ubuntu 中成功安装并配置了 VNC 服务器。要检查服务器的 IP 地址,我们可以使用hostname -I命令。
此外,为了方便起见,我们可以将 VNC 服务器设置为作为systemd服务运行。
4 从客户端计算机访问 VNC 服务器
一旦我们的 VNC 服务器启动并运行,我们就可以使用服务器的详细信息从任何客户端计算机访问它。但是,需要注意的是,任何拥有此信息的人都可以访问服务器。因此,我们假设我们已经设置了强 VNC 密码并配置了防火墙规则来限制对特定 IP 地址或范围的访问。
4.1 从 Windows
让我们从 Windows 访问我们的 VNC 服务器。为此,让我们在系统中下载并安装TightVNC客户端。
接下来,我们输入服务器的密码:
4.2 从 Linux 或 MacOS
我们可以使用 MacOS 或 Linux 机器上的任何 VNC 客户端来控制我们的 VNC 服务器。在 VNC 客户端中,输入<server_IP_address>::<display_port>即可访问服务器。
例如,在我们的 Linux 机器上,我们可以打开 Remmina 远程桌面客户端并输入我们服务器的 IP 和显示端口:
接下来,我们输入 VNC 服务器的密码来访问它:
因此,我们无需物理访问即可成功控制我们的服务器。
5 附加安全措施(可选)
如果我们需要额外的安全性,并希望确保只有之前通过 SSH 访问我们服务器的客户端才能连接到 VNC 服务器,我们可以限制我们的 VNC 服务器仅接受来自它的连接。然后,我们可以通过加密的 SSH 隧道将来自客户端的所有连接转发到服务器。
为此,我们将使用带有-localhost标志的vncserver命令启动我们的服务器:
vncserver -localhost
一旦我们的服务器运行,我们将前往我们的客户端机器访问我们的服务器。
5.1 Linux 或 MacOS 中的 SSH 隧道
我们可以通过在终端中运行ssh命令来创建 SSH 隧道:
ssh -L 5901:localhost:5901 -C -N -l baeldung-linux 192.168.10.119
该命令的语法如下:
ssh -L <source_port>:localhost:<display_port> -C -N -l <username> <server_ip>
我们必须根据服务器的信息和偏好(源端口)替换命令变量。成功建立 SSH 会话后,我们将最小化终端。然后,我们将打开任何 VNC 客户端并输入localhost::<display_port>以访问 VNC 服务器。
5.2 Windows 中的 SSH 隧道
在 Windows 中,我们将使用PuTTY创建 SSH 隧道。
在 PuTTY 中,导航到位于类别侧栏中SSH选项下的隧道选项。在这里,为 SSH 流量转发指定源端口(5901) 。它可以是任何未使用的端口(范围从 0 到 65535)。此外,我们将在目标字段中输入 VNC 服务器的IP 地址和显示端口。然后,我们将按添加按钮:
接下来,让我们选择会话类别,并在主机名字段中输入服务器的 IP 地址。然后按打开按钮:
现在,我们将输入服务器的密码来建立 SSH 会话并最小化此窗口:
接下来,我们打开 TightVNC Viewer 并在远程主机字段中输入localhost::<display_port> :
最后,让我们按下“连接”按钮来访问服务器。
6 总结
在本文中,我们在 Ubuntu 22.04 机器上安装了 XFCE 桌面环境和 TightVNC 服务器。
然后,我们配置 VNC 服务器以启动桌面环境。最后,我们使用客户端系统中的 VNC 客户端访问 VNC 服务器。
为了增加安全性,我们还可以建立 SSH 隧道。