本教程介绍如何在 Debian 9 上安装和配置 VNC 服务器。我们还将向您展示如何创建 SSH 隧道并安全地连接到 VNC 服务器。
虚拟网络计算 (VNC) 是一种图形桌面共享系统,允许您使用键盘和鼠标远程控制另一台计算机。
先决条件
在继续本教程之前,请确保您已以具有 sudo 权限的用户身份登录。
安装桌面环境
您的 Debian 服务器可能未安装桌面环境。我们的第一步是安装一个轻量级桌面环境。
Debian 软件源中有多种桌面环境 (DE) 可供选择。我们将使用 Xfce 作为首选桌面环境。它快速、稳定且轻量,非常适合在远程服务器上运行。
使用以下命令更新包索引并在您的 Debian 服务器上安装 Xfce:
终端
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils根据您的系统,下载和安装 Xfce 包可能需要一些时间。
安装 VNC 服务器
Debian 软件源中也有多种不同的 VNC 服务器可用,例如 TightVNC、TigerVNC 和 x11vnc。每个 VNC 服务器在速度和安全性方面都有其优缺点。
我们将使用 TigerVNC,这是一个积极维护的高性能 VNC 服务器。要在您的 Debian 服务器上安装 TigerVNC,请执行以下命令:
终端
sudo apt install tigervnc-standalone-server tigervnc-commonVNC 服务器安装完成后,运行 vncserver 命令以创建初始配置并设置密码。运行以下命令时请勿使用 sudo:
终端
vncserver系统将提示您输入并确认密码,以及是否将其设置为仅查看密码。如果您选择设置仅查看密码,用户将无法使用鼠标和键盘与 VNC 实例进行交互。
输出
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth: file /home/linuxize/.Xauthority does not exist
New 'debian9.localdomain:1 (linuxize)' desktop at:1 on machine debian9.localdomain
Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/linuxize/.vnc/debian9.localdomain:1.log
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/linuxize/.vnc/passwd:1 to connect to the VNC server.首次运行 vncserver 命令时,它将在 ~/.vnc 目录中创建并存储密码文件。
注意输出中主机名后面的 :1。这表示 VNC 服务器运行的显示端口号。在我们的案例中,服务器运行在 TCP 端口 5901 (5900+1)。如果您使用 vncserver 创建第二个实例,它将运行在下一个空闲端口,即 :2,这意味着服务器运行在端口 5902 (5900+2)。
重要的是要注意,在使用 VNC 服务器时,:X 是一个显示端口,指的是 5900+X。
在继续下一步之前,使用带有 -kill 选项的 vncserver 命令和服务器号作为参数停止 VNC 实例。在这种情况下,服务器运行在端口 5901 (:1),因此我们将使用以下命令停止它:
终端
vncserver -kill:1输出
Killing Xtigervnc process ID 6677... success!配置 VNC 服务器
现在 Xfce 和 TigerVNC 都已安装在机器上,我们需要配置 TigerVNC 以使用 Xfce。为此,创建以下文件:
终端
nano ~/.vnc/xstartup~/.vnc/xstartupsh
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4 完成后,保存并关闭文件。每当启动或重启 TigerVNC 服务器时,上述脚本将自动执行。
~/.vnc/xstartup 文件还需要具有执行权限。运行以下 chmod 命令以确保权限正确:
终端
chmod u+x ~/.vnc/xstartup如果需要向 VNC 服务器传递其他选项,可以创建一个名为 config 的文件,每行添加一个选项。示例如下:
~/.vnc/configconf
geometry=1920x1080
dpi=96创建 Systemd 单元文件
systemd 单元文件将允许我们根据需要轻松启动、停止和重启 VNC 服务。
打开文本编辑器,并将以下配置复制粘贴到其中。别忘了在第 7 行更改用户名以匹配您的用户名。
终端
sudo nano /etc/systemd/system/vncserver@.service/etc/systemd/system/vncserver@.servicesystemd
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
User=linuxize
PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill:%i > /dev/null 2>&1 ||:'
ExecStart=/usr/bin/vncserver:%i -geometry 1440x900 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill:%i
[Install]
WantedBy=multi-user.target保存并关闭文件。
运行以下命令通知 systemd 存在新的 vncserver@.service 文件:
终端
sudo systemctl daemon-reload接下来,启用该服务:
终端
sudo systemctl enable vncserver@1.service@ 符号后面的数字 1 定义了 VNC 服务将运行的显示端口。正如我们在上一节中讨论的,由于我们使用 1,VNC 服务器将监听端口 5901。
通过执行以下命令启动 VNC 服务:
终端
sudo systemctl start vncserver@1.service使用以下命令验证服务是否成功启动:
终端
sudo systemctl status vncserver@1.service输出
● vncserver@1.service - Remote desktop service (VNC)
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-10-03 05:23:33 PDT; 51s ago
Process: 7063 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill:1 > /dev/null 2>&1 ||: (code=exited, status=0/SUCCESS)
Main PID: 7071 (vncserver)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/system-vncserver.slice/vncserver@1.service
‣ 7071 /usr/bin/perl /usr/bin/vncserver:1 -geometry 1440x900 -alwaysshared -fg连接到 VNC 服务器
VNC 不是加密协议,可能会受到数据包嗅探的影响。建议的方法是创建 SSH 隧道,将本地机器上的端口 5901 的流量安全地转发到服务器的同一端口。
在 Linux 和 macOS 上设置 SSH 隧道
如果您的机器运行的是 Linux、macOS 或任何其他基于 Unix 的操作系统,您可以使用 ssh 命令轻松创建 SSH 隧道:
终端
ssh -L 5901:127.0.0.1:5901 -N -f -l username server_ip_address系统将提示您输入用户密码。
别忘了将 username 和 server_ip_address 替换为您的用户名和服务器的 IP 地址。
在 Windows 上设置 SSH 隧道
如果您运行的是 Windows,可以使用 PuTTY SSH 客户端设置 SSH 隧道。
打开 Putty,并在 Host name or IP address 字段中输入您的服务器 IP 地址。

在 Connection 菜单下,展开 SSH 并选择 Tunnels。在 Source Port 字段中输入 VNC 服务器端口 (5901),并在 Destination 字段中输入 server_ip_address:5901,然后单击 Add 按钮,如下图所示:

返回 Session 页面以保存设置,这样您就不需要每次都输入它们。现在您需要做的就是选择保存的会话,然后单击 Open 按钮登录远程服务器。
使用 Vncviewer 连接
现在您已经设置了 SSH 隧道,是时候打开您的 Vncviewer 并连接到位于 localhost:5901 的 VNC 服务器了。
您可以使用任何 VNC 查看器,例如 TigerVNC、TightVNC、RealVNC、UltraVNC、Vinagre 和 Google Chrome 的 VNC Viewer。
在本示例中,我们将使用 TigerVNC。打开您的 VNC 查看器,输入 localhost:5901,然后单击 Connect 按钮。

当提示时输入您的密码,您应该可以看到默认的 Xfce 桌面。它应该看起来像这样:

至此,您已通过 VNC 成功连接到服务器。现在您可以使用键盘和鼠标从本地机器开始与远程 XFCE 桌面进行交互。