简介
虚拟网络计算,或称VNC,是一个连接系统,允许你使用键盘和鼠标与远程服务器上的图形化桌面环境进行交互。它可以帮助那些还不习惯使用命令行的用户在远程服务器上管理文件、软件和设置。
在本指南中,你将在Debian 11服务器上用TightVNC建立一个VNC服务器,并通过SSH隧道安全地连接到它。然后,你将在你的本地机器上使用一个VNC客户端程序,通过图形化的桌面环境与服务器进行交互。
前提条件
要学习本教程,你将需要。
- 一台按照Debian 11初始服务器设置指南设置的Debian 11服务器,包括一个可以访问
sudo
的非root用户和一个防火墙。 - 一台安装了VNC客户端的本地计算机,支持通过SSH隧道的VNC连接。
一旦你设置好了一切,你就可以进行第一步了。
第1步 - 安装桌面环境和VNC服务器
默认情况下,Debian 11的服务器并没有安装图形化桌面环境或VNC服务器,所以你将从安装这些开始。
在选择 VNC 服务器和桌面环境方面,您有很多选择。在本教程中,你将安装最新的Xfce桌面环境和TightVNC软件包,这些软件包可从Ubuntu官方仓库获得。Xfce和TightVNC都以轻量级和快速著称,这将有助于确保即使在较慢的互联网连接上,VNC连接也能顺利和稳定。
用SSH连接到你的服务器后,更新你的软件包列表。
sudo apt update
现在在你的服务器上安装Xfce桌面环境,以及xfce4-goodies
包。
sudo apt install xfce4 xfce4-goodies
在安装过程中,你可能会被提示为Xfce选择一个默认的显示管理器。显示管理器是一个允许你通过图形界面选择和登录到桌面环境的程序。你只有在用VNC客户端连接时才会使用Xfce,在这些Xfce会话中,你已经以你的非root Debian用户身份登录了。所以在本教程中,你对显示管理器的选择并不重要。选择其中一个,然后按ENTER
。
安装完成后,安装TightVNC服务器。
sudo apt install tightvncserver
接下来,安装dbus-x11
依赖关系,以确保与VNC服务器的正常连接。
sudo apt install dbus-x11
为了在安装后完成VNC服务器的初始配置,使用vncserver
命令来设置安全密码并创建初始配置文件。
vncserver
接下来会有一个提示,要求输入并验证一个密码,以便远程访问你的机器。
Output
You will require a password to access your desktops.
Password:
Verify:
密码的长度必须在六到八个字符之间。超过八个字符的密码将被自动截断。
一旦你验证了密码,你可以选择创建一个仅供查看的密码。使用只查看密码登录的用户将不能用鼠标或键盘控制VNC实例。如果你想用你的VNC服务器向其他人演示一些东西,这是一个有用的选项,但这不是必需的。
然后,该过程为服务器创建必要的默认配置文件和连接信息。
Output
Would 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
接下来,配置它以启动Xfce并通过图形界面访问服务器。
第2步 - 配置VNC服务器
VNC服务器需要知道启动时要执行哪些命令。具体来说,VNC需要知道它应该连接到哪个图形桌面。
这些命令位于你的主目录下.vnc
文件夹中一个名为xstartup
的配置文件中。启动脚本是在上一步运行vncserver
命令时创建的,但你将创建自己的脚本来启动Xfce桌面。
当VNC第一次被设置时,它在端口5901
,启动一个默认的服务器实例。这个端口被称为显示端口,VNC称其为:1
。VNC可以在其他显示端口启动多个实例,如:2
、:3
,等等。
因为你要改变VNC服务器的配置方式,所以首先用以下命令停止运行在端口5901
的VNC服务器实例。
vncserver -kill :1
以下是针对你的服务器环境的PID的输出。
Output
Killing Xtightvnc process ID 17648
在你修改xstartup
文件之前,先备份原文件。
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
现在创建一个新的xstartup
文件并在你喜欢的文本编辑器中打开它。
nano ~/.vnc/xstartup
只要你启动或重新启动VNC服务器,该文件中的命令就会自动执行。如果你的桌面环境还没有启动,你需要VNC来启动它。在该文件中添加以下命令。
~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
下面简要介绍一下每一行的作用。
-
#!/bin/bash
:第一行是一个shebang。在*nix平台上的可执行纯文本文件中,shebang告诉系统将该文件传递给哪个解释器来执行。在这个例子中,你要把文件传给Bash解释器。这将使每一个连续的行被当作命令来执行,按顺序进行。 -
xrdb $HOME/.Xresources
:这个命令告诉VNC的GUI框架读取用户的.Xresources
文件。.Xresources
,用户可以在这里对图形桌面的某些设置进行修改,比如终端颜色、光标主题和字体渲染。 -
startxfce4 &
:这个命令告诉服务器启动Xfce。在这里你可以找到所有你需要的图形软件,以便舒适地管理你的服务器。
当你完成后,保存并退出你的编辑器。如果你使用的是nano
,你可以通过按CTRL+X
,然后按Y
,再按ENTER
。
为了确保VNC服务器能够正确使用这个新的启动文件,你需要使它可执行。
sudo chmod +x ~/.vnc/xstartup
现在,重新启动VNC服务器。
vncserver
输出结果将类似于以下内容。
Output
New 'X' desktop is your_hostname:1
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
配置到位后,你就可以从你的本地机器连接到VNC服务器了。
第3步 - 安全地连接VNC桌面
VNC本身在连接时并不使用安全协议。为了安全连接,你将使用SSH隧道连接到你的服务器,然后告诉你的VNC客户端使用该隧道,而不是进行直接连接。
在你的本地计算机上创建一个SSH连接,安全地转发到VNC的localhost
连接。你可以通过Linux或macOS上的终端用以下命令完成。记住要替换 sammy
和 your_server_ip
用你的非root用户名和你的服务器的IP地址。
ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
请注意,当你在本地机器的终端中运行这个命令后,没有输出结果返回。你将不得不使用VNC客户端来查看图形界面。
下面是这个ssh
命令的选项的含义。
-L
开关指定了端口绑定。在这种情况下,你将远程连接的端口5901
与你本地机器上的端口5901
绑定。-C
开关启用了压缩功能,以帮助最大限度地减少资源消耗和提高速度。-N
开关告诉ssh
,你不想执行远程命令。-l
开关指定了远程登录名。请确保替换sammy
和your_server_ip
替换为你的非root用户的名字和你的服务器的IP地址。
如果你使用PuTTY连接到你的服务器,你可以通过右击终端窗口的顶部栏来创建一个SSH隧道,然后选择改变设置...选项。

在 PuTTY 重新配置窗口左侧的树状菜单中找到连接分支。展开SSH分支,点击隧道。在控制SSH端口转发的选项中,输入5901
作为源端口,输入localhost:5901
作为目的地,像下面这样。
将端口和目的地信息添加到PuTTY中
然后点击添加按钮,再点击应用按钮来实现隧道。
一旦隧道运行,使用VNC客户端连接到localhost:5901
。你会被提示使用你在 中设置的密码进行认证。 步骤1.
一旦你连接上了,默认的Xfce桌面会出现,如下所示。
当你第一次通过VNC连接进入Xfce桌面环境时
选择使用默认配置来配置你的桌面。
你可以用文件管理器或从命令行访问你的主目录中的文件,如下面所示。

在你的本地机器上,在你的终端中按下CTRL+C
,停止SSH隧道并返回到你的提示。这将断开你的VNC会话。
接下来,你将把VNC服务器设置为一个服务。
第4步 - 作为系统服务运行VNC
接下来,你将把VNC服务器设置为一个systemd服务。你可以像其他服务一样,根据需要启动、停止和重启它。这也将确保VNC在你的服务器重启时也能启动。
首先,用你喜欢的文本编辑器创建一个名为/etc/systemd/system/vncserver@.service
的新单元文件。
sudo nano /etc/systemd/system/vncserver@.service
名字后面的@
符号将让你传入一个参数,你可以在服务配置中使用。你将用它来指定你在管理服务时要使用的VNC显示端口。
在文件中添加以下几行。请确保修改User
、Group
、WorkingDirectory
,以及PIDFILE
中的用户名,以符合你的用户名。
/etc/systemd/system/vncserver@.service
[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
如果VNC已经在运行,ExecStartPre
命令会停止它。ExecStart
命令启动VNC,并将色深设置为24位色,分辨率为1280x800。你也可以修改这些启动选项以满足你的需要。
完成后保存并关闭该文件。
接下来,让系统知道这个新的单元文件。
sudo systemctl daemon-reload
然后,启用该单元文件。
sudo systemctl enable vncserver@1.service
@
后面的1
标志着服务应该出现在哪个显示号码上,在这种情况下,默认的:1
,正如在 中讨论的那样。 第2步.
如果VNC服务器的当前实例仍在运行,请停止它。
vncserver -kill :1
然后像启动其他systemd服务一样启动它。
sudo systemctl start vncserver@1
你可以用下面的命令来验证它是否启动。
sudo systemctl status vncserver@1
如果启动正确,输出结果将类似于下面。
Output
● vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-08-19 16:21:36 UTC; 5s ago
Process: 24469 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 24474 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS)
Main PID: 24482 (Xtightvnc)
. . .
当你重新启动机器时,你的VNC服务器就可以使用了。
再次启动你的SSH隧道。
ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
然后用你的VNC客户端软件建立一个新的连接,localhost:5901
,连接到你的机器。
总结
你现在有了一个安全的VNC服务器并在你的Debian 11服务器上运行。现在,您可以通过一个用户友好和熟悉的图形界面来管理您的文件、软件和设置。您还可以远程运行图形化软件,如网页浏览器。