介绍
虚拟网络计算或 VNC 是一种连接系统,允许您使用键盘和鼠标与远程服务器上的图形桌面环境进行交互。对于还不熟悉命令行的用户来说,它使管理远程服务器上的文件、软件和设置变得更加容易。
在本快速入门指南中,您将在 Ubuntu 20.04 服务器上使用TightVNC设置 VNC 服务器,并通过 SSH 隧道安全地连接到它。然后,您将使用本地计算机上的 VNC 客户端程序通过图形桌面环境与服务器交互。
先决条件
要完成本教程,您需要:
- 一台 Ubuntu 20.04 服务器,具有非 root 管理用户和使用 UFW 配置的防火墙。要进行设置,请按照我们针对 Ubuntu 20.04 的初始服务器设置指南进行操作。
- 安装了 VNC 客户端的本地计算机。您使用的 VNC 客户端必须支持通过 SSH 隧道的连接:
步骤 1 — 安装桌面环境和 VNC 服务器
使用 SSH 连接到您的服务器后,更新您的软件包列表:
- sudo apt update
然后安装 Xfce 和xfce4-goodies
软件包,其中包含一些桌面环境的增强:
- sudo apt install xfce4 xfce4-goodies
安装完成后,安装 TightVNC 服务器:
- sudo apt install tightvncserver
接下来,运行vncpasswd
命令设置 VNC 访问密码并创建初始配置文件:
- vncpasswd
系统会提示您输入并验证密码以远程访问您的机器:
OutputYou will require a password to access your desktops.
Password:
Verify:
密码长度必须在 6 到 8 个字符之间;超过 8 个字符的密码将被自动截断。验证密码后,您将可以选择创建仅供查看的密码,但这不是必需的。
如果您想更改密码或添加仅供查看的密码,请重新运行该vncpasswd
命令。
步骤 2 — 配置 VNC 服务器
VNC 服务器在启动时运行的命令位于主目录下文件夹中的配置文件xstartup
中.vnc
。在这一步中,我们将创建一个自定义xstartup
脚本,它会告诉 VNC 服务器连接到 Xfce 桌面。
创建一个新xstartup
文件并在文本编辑器中打开它,例如nano
:
- nano ~/.vnc/xstartup
将以下行添加到新文件中:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
在shebang 之后,文件中的第一个命令xrdb $HOME/.Xresources
告诉 VNC 的 GUI 框架读取服务器用户的.Xresources
文件。第二个命令告诉服务器启动 Xfce。
添加这些行后保存并关闭文件。如果您使用过nano
,请按CTRL + X
, Y
, 然后ENTER
。
然后使文件可执行:
- chmod +x ~/.vnc/xstartup
并使用以下vncserver
命令启动 VNC 服务器:
- vncserver -localhost
此命令包括将-localhost
VNC 服务器绑定到您服务器的环回接口的选项。这将导致 VNC 只允许来自安装它的服务器的连接。
你会看到类似这样的输出:
OutputNew 'X' desktop is your_hostname:1
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
在这里,您可以看到该命令在端口上启动了一个默认服务器实例5901
。此端口称为显示端口,VNC 将其称为:1
:
步骤 3 — 安全连接到 VNC 桌面
为了安全地连接到您的服务器,您将建立一个 SSH 隧道,然后告诉您的 VNC 客户端使用该隧道进行连接,而不是进行直接连接。
在您的本地计算机上创建一个 SSH 连接,以安全地转发到localhost
VNC的连接。您可以使用以下ssh
命令通过 Linux 或 macOS 上的终端执行此操作:
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
本地端口可以是尚未被其他程序或进程阻止的任何端口,尽管我们59000
在本示例中使用。另外,请确保更改sammy
为您的 Ubuntu 用户的用户名并your_server_ip
反映您服务器的 IP 地址。
如果您使用 PuTTY 连接到您的服务器,您可以通过右键单击终端窗口的顶部栏,然后单击更改设置…选项来创建 SSH 隧道:
在 PuTTY Reconfiguration 窗口左侧的树形菜单中找到Connection分支。展开SSH分支并单击Tunnels。在选项控制SSH端口转发屏幕上,输入59000
为源端口和localhost:5901
为目标,就像这样:
然后单击添加按钮,然后单击应用按钮以实现隧道。
隧道运行后,使用 VNC 客户端连接到localhost:59000
. 系统将提示您使用您在步骤 1 中设置的密码进行身份验证。
连接后,您将看到默认的 Xfce 桌面。它应该是这样的:
您可以使用文件管理器或从命令行访问主目录中的文件,如下所示:
CTRL+C
在您的本地终端中按下以停止 SSH 隧道并返回到您的提示。这也会断开您的 VNC 会话。
步骤 4 — 将 VNC 作为系统服务运行
通过将 VNC 服务器设置为作为 systemd 服务运行,您可以使用 systemd 的管理命令启动、停止和重新启动服务器,并使其在服务器启动时开始运行。
首先,创建一个名为的新 systemd 单元文件/etc/systemd/system/[email protected]
:
- sudo nano /etc/systemd/system/[email protected]
@
名称末尾的符号将让我们传入一个您可以在服务配置中使用的参数。您将使用它来指定管理服务时要使用的 VNC 显示端口。
将以下行添加到文件中,确保更改User、Group、WorkingDirectory的值以及PIDFILE值中的用户名以匹配您的用户名:
[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 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
保存并关闭文件。
接下来,让系统知道新的单元文件:
- sudo systemctl daemon-reload
启用单元文件:
- sudo systemctl enable [email protected]
在1
以下的@
符号表示,其显示编号的服务应该出现过,在这种情况下,默认:1
为在步骤2中进行了讨论。
如果 VNC 服务器的当前实例仍在运行,请停止它:
- vncserver -kill :1
然后像启动任何其他 systemd 服务一样启动它:
- sudo systemctl start vncserver@1
您可以使用以下命令验证它是否启动:
- sudo systemctl status vncserver@1
有关如何使用 Systemctl 来管理 Systemd 服务和单元的更多信息,请参阅我们的教程systemctl
。
要重新连接,请再次启动您的 SSH 隧道:
- ssh -L 59000:127.0.0.1:5901 -C -N -l sammy your_server_ip
然后使用您的 VNC 客户端软件建立新连接以连接到您的服务器。localhost:59000
结论
您现在已经在 Ubuntu 20.04 服务器上启动并运行了一个安全的 VNC 服务器。现在,您将能够使用用户友好的图形界面管理您的文件、软件和设置,并且您将能够远程运行图形软件,如 Web 浏览器。