介绍
虚拟网络计算,或VNC,是一个连接系统,允许您使用键盘和鼠标在远程服务器上与图形桌面环境进行交互。
在本快速启动指南中,您将在 Ubuntu 20.04 服务器上设置一个 VNC 服务器,并通过 SSH 隧道安全连接到它,然后,您将使用本地机器上的 VNC 客户端程序通过图形桌面环境与您的服务器进行交互。
前提条件
要完成本教程,您将需要:
- 一个 Ubuntu 20.04 服务器具有非 root 管理用户和与 UFW 配置的防火墙。 要设置此功能,请遵循我们的 Ubuntu 20.04 初始服务器设置指南。
- 安装了 VNC 客户端的本地计算机. 您使用的 VNC 客户端必须支持 SSH 隧道上的连接:
- 在 Windows 上,您可以使用 TightVNC, RealVNC或 UltraVNC.
- 在 Linux 上,您可以选择许多选项,包括
agrevin
,ckr
d, 'VNC Real'(https://support.apple.com/guide/mac-help/screen-sharing-overview-mh14066/mac) 程序,或使用
步骤 1 — 安装桌面环境和 VNC 服务器
在使用 SSH 连接到您的服务器后,更新您的包列表:
1sudo apt update
然后将 Xfce 与xfce4-goodies
包一起安装,其中包含了桌面环境的一些改进:
1sudo apt install xfce4 xfce4-goodies
安装完成后,安装 TightVNC 服务器:
1sudo apt install tightvncserver
接下来,运行vncpasswd
命令来设置VNC访问密码并创建初始配置文件:
1vncpasswd
您将被要求输入并验证密码以远程访问您的机器:
1[secondary_label Output]
2You will require a password to access your desktops.
3
4Password:
5Verify:
密码必须长6到8个字符;超过8个字符的密码将自动缩短.一旦您验证了密码,您将有选择创建只查看密码,但这不需要。
如果您想更改密码或添加只查看密码,请重新运行vncpasswd
命令。
步骤 2 — 配置 VNC 服务器
VNC 服务器在启动时运行的命令位于您的主目录下面的.vnc 文件夹中,一个名为 xstartup
的配置文件中,在此步骤中,我们将创建一个自定义的 xstartup
脚本,该脚本会告诉 VNC 服务器连接到 Xfce 桌面。
创建一个新的xstartup
文件,并在文本编辑器中打开它,例如nano
:
1nano ~/.vnc/xstartup
将以下行添加到新文件中:
1[label ~/.vnc/xstartup]
2#!/bin/bash
3xrdb $HOME/.Xresources
4startxfce4 &
在 [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)之后,文件中的第一个命令, xrdb $HOME/.Xresources
,告诉VNC的GUI框架读取服务器用户的 .Xresources
文件。
添加这些行后保存并关闭文件. 如果您使用了nano
,请按CTRL + X
,Y
,然后按ENTER
。
然后,使文件可执行:
1chmod +x ~/.vnc/xstartup
然后用vncserver
命令启动VNC服务器:
1vncserver -localhost
此命令包括-localhost
选项,该选项将 VNC 服务器连接到您的服务器的 loopback 接口,这将导致 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
在这里,您可以看到该命令在端口 5901
上启动了默认服务器实例. 该端口称为 display port,并且由 VNC 称为 :1
:
步骤 3 — 安全地连接到 VNC 桌面
要安全地连接到您的服务器,您将建立一个SSH隧道,然后告诉VNC客户端使用该隧道连接,而不是直接连接。
在本地计算机上创建一个 SSH 连接,可安全地向 VNC 的本地最强
连接进行转发,您可以通过 Linux 或 macOS 的终端使用以下ssh
命令:
1[environment local]
2ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
本地端口可以是任何尚未被其他程序或流程阻止的端口,尽管我们在本例中使用59000
。
如果您正在使用 PuTTY 连接到您的服务器,您可以通过右键单击终端窗口的顶部栏来创建 SSH 隧道,然后单击 更改设置... 选项:
在 PuTTY 重组窗口左侧的树菜单中找到 连接 分支。 扩展 SSH 分支并单击 隧道 。 在控制 SSH 端口转发**的 ** 选项屏幕上,如下,输入 59000
作为 源端口 和 localhost:5901
作为 目的地 :
然后点击添加
按钮,然后点击应用
按钮来实现隧道。
一旦隧道运行,请使用VNC客户端连接到Localhost:59000
。您将被要求使用您在步骤 1中设置的密码进行身份验证。
一旦连接,你会看到默认的 Xfce 桌面. 它应该看起来像这样:
您可以通过文件管理器或从命令行访问您的主目录中的文件,如下所示:
在本地终端中按CTRL+C
,停止 SSH 隧道并返回您的提示,这也将切断您的 VNC 会话。
步骤 4 – 运行 VNC 作为系统服务
通过设置 VNC 服务器以作为 systemd 服务运行,您可以使用 systemd 的管理命令启动、停止和重新启动服务器,并允许它在服务器启动时启动。
首先,创建一个名为 /etc/systemd/system/[email protected]
的新的 systemd 单元文件:
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
保存并关闭文件。
接下来,让系统知道新的单元文件:
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
请参阅我们的教程 如何使用Systemctl来管理Systemd服务和单位 有关systemctl
的更多信息。
要重新连接,请重新启动您的 SSH 隧道:
1[environment local]
2ssh -L 59000:127.0.0.1:5901 -C -N -l sammy your_server_ip
然后使用 VNC 客户端软件创建新的连接到localhost:59000
,以连接到您的服务器。
结论
你现在有一个安全的VNC服务器,在你的Ubuntu 20.04服务器上运行,现在你将能够管理你的文件,软件和设置,使用用户友好的图形界面,你将能够远程运行图形软件,如Web浏览器。