介绍
虚拟网络计算,或VNC,是一个连接系统,允许您使用键盘和鼠标在远程服务器上与图形桌面环境进行交互。
在本指南中,您将在 Ubuntu 18.04 服务器上设置 VNC 服务器,并通过 SSH 隧道安全连接到它,您将使用 TightVNC,一个快速而轻量级的远程控制包。
前提条件
要完成本教程,您将需要:
一个 Ubuntu 18.04 服务器是按照 Ubuntu 18.04 初始服务器安装指南设置的,包括一个 sudo 非根用户和一个防火墙。
- 一个安装了 VNC 客户端的本地计算机,支持 SSH 隧道上的 VNC 连接。
- 在 Winows 上,你可以使用 TightVNC, RealVNC,或 UltraVNC.
- 在 macOS 上,你可以使用内置的 Screen Sharing程序,或者可以使用像 RealVNC这样的跨平台应用程序。
- 在 Linux
步骤 1 — 安装桌面环境和 VNC 服务器
默认情况下,Ubuntu 18.04 服务器不配有图形桌面环境或安装 VNC 服务器,所以我们将首先安装这些服务器,具体来说,我们将为最新 Xfce 桌面环境和 TightVNC 包安装包,可在官方 Ubuntu 存储库中使用。
在您的服务器上,更新您的包列表:
1sudo apt update
现在在您的服务器上安装 Xfce 桌面环境:
1sudo apt install xfce4 xfce4-goodies
安装完成后,安装 TightVNC 服务器:
1sudo apt install tightvncserver
要完成安装后 VNC 服务器的初始配置,请使用vncserver
命令设置安全密码并创建初始配置文件:
1vncserver
您将被要求输入并验证密码以远程访问您的机器:
1[secondary_label Output]
2You will require a password to access your desktops.
3
4Password:
5Verify:
密码必须长6~8个字符,超过8个字符的密码将自动缩短。
一旦您验证了密码,您将有机会创建一个仅查看密码。使用仅查看密码登录的用户将无法使用鼠标或键盘控制VNC实例。
然后,该过程为服务器创建必要的默认配置文件和连接信息:
1[secondary_label Output]
2Would you like to enter a view-only password (y/n)? n
3xauth: file /home/sammy/.Xauthority does not exist
4
5New 'X' desktop is your_hostname:1
6
7Creating default startup script /home/sammy/.vnc/xstartup
8Starting applications specified in /home/sammy/.vnc/xstartup
9Log file is /home/sammy/.vnc/your_hostname:1.log
现在,让我们配置VNC服务器。
步骤 2 – 配置 VNC 服务器
VNC 服务器需要知道在启动时要执行哪些命令,具体来说,VNC 需要知道应该连接到哪个图形桌面。
这些命令位于您的主目录下面的.vnc
文件夹中,一个名为xstartup
的配置文件中,在上一步运行vncserver
时创建了启动脚本,但我们将创建自己的 Xfce 桌面。
当 VNC 首次设置时,它会在端口 5901
上启动默认服务器实例.该端口被称为 display port,并且由 VNC 称为 :1
. VNC 可以在其他显示端口上启动多个实例,如 :2
、 :3
等。
因为我们要改变 VNC 服务器的配置方式,所以先用以下命令停止在端口 5901
上运行的 VNC 服务器实例:
1vncserver -kill :1
输出应该是这样的,尽管你会看到不同的 PID:
1[secondary_label Output]
2Killing Xtightvnc process ID 17648
在修改xstartup
文件之前,备份原始文件:
1mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
现在创建一个新的xstartup
文件,并在文本编辑器中打开它:
1nano ~/.vnc/xstartup
此文件中的命令每次启动或重新启动 VNC 服务器时都会自动执行. 如果尚未启动,我们需要 VNC 来启动我们的桌面环境。
1[label ~/.vnc/xstartup]
2#!/bin/bash
3xrdb $HOME/.Xresources
4startxfce4 &
文件中的第一个命令,xrdb $HOME/.Xresources,告诉VNC的GUI框架读取服务器用户的.Xresources
文件。 `.Xresources’是用户可以对图形桌面的某些设置进行更改的地方,如终端颜色,方程式主题和字体渲染。
保存并关闭文件。
为了确保VNC服务器能够正确使用这个新的启动文件,我们需要使其可执行。
1sudo chmod +x ~/.vnc/xstartup
现在,重新启动VNC服务器。
1vncserver
你会看到类似于此的输出:
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
有了配置,让我们从我们的本地机器连接到服务器。
步骤 3 — 安全地连接 VNC 桌面
连接时,VNC本身不使用安全协议,我们将使用SSH隧道安全连接到我们的服务器,然后告诉我们的VNC客户端使用该隧道,而不是直接连接。
在本地计算机上创建一个 SSH 连接,可以安全地向 VNC 的本地最强
连接。
1ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
在这种情况下,我们将远程连接的端口5901
绑定到本地机器的端口5901
。-C
开关允许压缩,而-N
开关告诉ssh
,我们不想执行远程命令。
请记住将sammy
和your_server_ip
替换为您的服务器的 sudo 非根用户名和 IP 地址。
如果您正在使用图形 SSH 客户端,例如 PuTTY,请使用your_server_ip
作为连接 IP,并在程序的 SSH 隧道设置中将localhost:5901
设置为新的转发端口。
一旦隧道运行,请使用VNC客户端连接到‘localhost:5901’,您将被要求使用您在步骤 1中设置的密码进行身份验证。
一旦连接,你会看到默认的 Xfce 桌面. 它应该看起来像这样:
您可以通过文件管理器或从命令行访问您的主目录中的文件,如下所示:
在您的终端中按CTRL+C
,停止 SSH 隧道并返回您的提示,这也将切断您的 VNC 会话。
接下来,让我们将我们的VNC服务器设置为服务。
步骤 4 – 运行 VNC 作为系统服务
接下来,我们将设置VNC服务器作为系统d服务,以便我们可以根据需要启动,停止和重新启动它,就像任何其他服务一样。
首先,使用您最喜欢的文本编辑器创建一个名为 /etc/systemd/system/[email protected]
的新单元文件:
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 :%i
15ExecStop=/usr/bin/vncserver -kill :%i
16
17[Install]
18WantedBy=multi-user.target
ExecStartPre
命令会停止VNC,如果它已经运行了,ExecStart
命令会启动VNC,并将颜色深度设置为24位颜色,分辨率为1280x800。
保存并关闭文件。
接下来,让系统知道新的单元文件。
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
如果它开始正确,输出应该是这样的:
1[secondary_label Output]
2● vncserver@1.service - Start TightVNC server at startup
3 Loaded: loaded (/etc/systemd/system/vncserver@.service; indirect; vendor preset: enabled)
4 Active: active (running) since Mon 2018-07-09 18:13:53 UTC; 2min 14s ago
5 Process: 22322 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
6 Process: 22316 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
7 Main PID: 22330 (Xtightvnc)
8
9...
您的 VNC 服务器将在您重新启动机器时可用。
重新启动您的 SSH 隧道:
1ssh -L 5901:127.0.0.1:5901 -C -N -l sammy your_server_ip
然后使用 VNC 客户端软件创建新的连接到localhost:5901
以连接到您的机器。
结论
你现在有一个安全的VNC服务器,在你的Ubuntu 18.04服务器上运行,现在你将能够管理你的文件,软件和设置,使用易于使用和熟悉的图形界面,你将能够远程运行图形软件,如Web浏览器。