8 使用 VNC 远程访问 #
利用虚拟网络计算(Virtual Network Computing,VNC)可以通过图形桌面控制远程计算机(与远程外壳访问相对)。VNC 是独立于平台的并允许您从任何操作系统访问远程计算机。
SUSE Linux Enterprise Server 支持两种不同种类的 VNC 会话:自客户端启动起在 VNC 连接期间“在线”的一次性会话和始终“在线”直到被明确终止的永久会话。
一台计算机可在不同端口上同时提供两种会话,但当会话打开后不能从一种类型转换为另一种类型。
8.1 vncviewer
客户端 #
要连接到服务器提供的 VNC 服务,需要使用客户端。SUSE Linux Enterprise Server 中的默认客户端是 tigervnc
包提供的 vncviewer
。
8.1.1 使用 vncviewer CLI 进行连接 #
要启动 VNC 查看器并发起与服务器的会话,请使用以下命令:
tux >
vncviewer jupiter.example.com:1
若不使用 VNC 显示器编号,您也可以指定带两个冒号的端口号:
tux >
vncviewer jupiter.example.com::5901
您在 VNC 客户端中指定的实际显示号或端口号必须与在目标计算机上通过 vncserver
命令提取的显示号或端口号相同。有关更多信息,请参见第 8.4 节 “持续 VNC 会话”。
8.1.2 使用 vncviewer GUI 进行连接 #
在不指定 --listen
或要连接的主机的情况下运行 vncviewer
会显示一个窗口,要求您输入连接细节。按第 8.1.1 节 “使用 vncviewer CLI 进行连接”中所述在 字段中输入主机,然后单击 。
8.1.3 未加密连接通知 #
VNC 协议支持不同类型的加密连接,请不要将这些连接与口令身份验证相混淆。如果某个连接未使用 TLS,VNC 查看器的窗口标题中可能会出现“(连接未加密!)”文本。
8.2 Remmina:远程桌面客户端 #
Remmina 是功能丰富的新式远程桌面客户端。它支持多种访问方法,例如 VNC、SSH、RDP 或 Spice。
8.2.1 安装 #
要使用 Remmina,请检查系统上是否安装了 remmina 包,如未安装,请加以安装。记得还要安装适用于 Remmina 的 VNC 插件:
root #
zypper in remmina remmina-plugin-vnc
8.2.2 主窗口 #
通过输入 remmina
命令运行 Remmina。
该应用程序主窗口显示储存的远程会话列表。在这里,您可以添加和保存新远程会话、快速启动新会话而不保存、启动以前保存的会话,或设置 Remmina 的全局首选项。
8.2.3 添加远程会话 #
要添加和保存新远程会话,请单击主窗口左上方的 。 窗口即会打开。
在用于指定新添加的远程会话配置文件的字段中填写信息。最重要的技术包括:
- 名称
配置文件的名称,将列于主窗口中。
- 协议
连接到远程会话时要使用的协议,例如 VNC。
- 服务器
远程服务器的 IP 或 DNS 地址和显示号。
- 用户名、口令
要用于进行远程身份验证的身份凭证。保留为空表示不进行身份验证。
- 色深、质量
根据连接速度和质量选择最佳选项。
选择
选项卡可输入更具体的设置。如果客户端与远程服务器之间的通讯不加密,请激活
,否则连接会失败。选择
选项卡可显示高级 SSH 隧道通讯进程和身份验证选项。单击
进行确认。新设置的配置文件将列在主窗口中。8.2.4 启动远程会话 #
您可以启动以前保存的会话,也可以快速启动一个远程会话而不保存连接细节。
8.2.4.1 快速启动远程会话 #
要快速启动远程会话而不添加并保存连接细节,请使用主窗口顶部的下拉框和文本字段。
从下拉框中选择通讯协议(例如 VNC),然后输入 VNC 服务器的 DNS 或 IP 地址,后跟一个冒号和显示号,然后按 Enter 确认。
8.2.4.2 打开保存的远程会话 #
要打开特定的远程会话,请从会话列表中双击该会话。
8.2.4.3 远程会话窗口 #
远程会话会在新窗口的标签中打开。每个标签托管一个会话。窗口左侧的工具栏可用来管理窗口/会话,例如切换全屏模式、调整窗口大小以适应会话的显示大小、将特定按键发送到会话、对会话进行屏幕截图,或设置图像质量。
8.2.5 编辑、复制和删除保存的会话 #
要编辑保存的某个远程会话,请在 Remmina 的主窗口中右键单击其名称,然后选择 。有关相关字段的说明,请参见第 8.2.3 节 “添加远程会话”。
要复制保存的某个远程会话,请在 Remmina 的主窗口中右键单击其名称,然后选择 。在 窗口中,更改配置文件的名称,(可选)调整相关选项,然后单击 确认。
要删除保存的某个远程会话,请在 Remmina 的主窗口中右键单击其名称,然后选择 。在下一个对话框中,单击 确认。
8.2.6 从命令行运行远程会话 #
如果您需要从命令行或使用批处理文件打开远程会话,而不先打开应用程序主窗口,请使用以下语法:
tux >
remmina -c profile_name.remmina
Remmina 的配置文件储存在您主目录下的 .local/share/remmina/
目录中。要确定哪个配置文件属于您要打开的会话,请运行 Remmina,在主窗口中单击会话名称,然后在窗口底部的状态行中查看配置文件的路径。
如果 Remmina 未在运行,您可以将配置文件重命名为更合理的文件名,例如 sle15.remmina
。您甚至可以将配置文件复制到自定义目录,并从该目录中使用 remmina -c
命令来运行它。
8.3 一次性 VNC 会话 #
一次性会话由远程客户端启动。它在服务器上启动图形登录屏幕。这样您可以选择启动会话的用户,并且如果登录管理器支持,还可以选择桌面环境。终止与此类 VNC 会话的客户端连接时,此会话中启动的所有应用程序也将终止。一次性 VNC 会话不能共享,但可以在一台主机上同时存在多个会话。
启动
› › 。选中
。如果您打算在 Web 浏览器窗口中访问 VNC 会话,请激活
。如果需要,还可以选中
(例如,当网络接口配置为在外部区域中时)。如果有多个网络接口,请通过 将打开防火墙端口限制为特定的接口。单击
确认您的设置。如果不是所有需要的包都可使用,则需要批准安装缺少的包。
提示:重启动显示管理器YaST 对显示管理器设置进行了更改。您需要注销当前图形会话并重启动显示管理器,以使更改生效。
8.3.1 可用配置 #
SUSE Linux Enterprise Server 上的默认配置对会话使用 1024x768 像素(颜色深度 16 位)。会话在端口 5901
(对于“普通”VNC 查看器,等同于 VNC 显示器 1
)和端口 5801
上可用(对于 Web 浏览器)。
其他配置可在不同端口上使用,请参见第 8.3.3 节 “配置一次性 VNC 会话”。
VNC 显示器编号和 X 显示器编号是独立于一次性会话的。VNC 显示器编号手动指派给服务器支持的每个配置(如上例中的 :1)。只要 VNC 会话启动时带任一配置,就会自动获取可用 X 显示器编号。
默认情况下,VNC 客户端与服务器将尝试通过安装后生成的自我签名 SSL 证书安全通讯。您可以使用默认的证书,也可以将它替换为您自己的证书。使用自我签名证书时,需在首次连接之前确认其签名。
8.3.2 启动一次性 VNC 会话 #
要连接一次性 VNC 会话,必须安装 VNC 查看器,另请参见第 8.1 节 “vncviewer
客户端”。
8.3.3 配置一次性 VNC 会话 #
如果不需要或想修改默认配置,则可以跳过此部分。
一次性 VNC 会话通过 systemd
套接字 xvnc.socket
启动。默认情况下提供六个配置块:三个用于 VNC 查看器(vnc1
到 vnc3
),另外三个用于 Java 小程序(vnchttpd1
到 vnchttpd3
)。默认情况下,只有 vnc1
和 vnchttpd1
是活动的。
要在引导时激活 VNC 服务器套接字,请运行以下命令:
sudo systemctl enable xvnc.socket
要立即启动套接字,请运行:
sudo systemctl start xvnc.socket
Xvnc
服务器可通过 server_args
选项配置。有关选项列表,请参见 Xvnc --help
。
当添加自定义配置时,请确保它们未使用已由其他配置、其他服务或同一主机上的现有永久 VNC 会话使用的端口。
通过输入以下命令激活配置更改:
tux >
sudo
systemctl reload xvnc.socket
按照过程 8.1 “启用一次性 VNC 会话” 中的描述激活远程管理时,端口 5801
和 5901
将在防火墙中打开。如果用于 VNC 会话的网络接口受防火墙保护,则为 VNC 会话激活更多端口时,需要手动打开各个端口。有关指导,请参见Chapter 16, Masquerading and Firewalls。
8.4 持续 VNC 会话 #
可以从多个客户端同时访问持续会话。为了便于演示,我们选择一个较为理想的配置,一个客户端具有完全访问权限,所有其他客户端只具有查看访问权限。另一个用例是教员可能需要访问学员桌面的培训。
要连接持续 VNC 会话,必须安装 VNC 查看器。有关更多详细信息,请参见第 8.1 节 “vncviewer
客户端”。
持续 VNC 会话分为以下两类:
8.4.1 使用 vncserver
启动的 VNC 会话 #
此类型的持续 VNC 会话在服务器上启动。该会话和其上启动的所有应用程序运行时不考虑客户端连接,直到会话被终止。永久会话访问受到两种可用口令类型的保护:
授予完全访问权限的普通口令或
可选仅查看口令,授予非交互(仅查看)访问权限。
一个会话可一次具有两种类型的多个客户端连接。
vncserver
启动持续 VNC 会话 #打开外壳,确保以拥有 VNC 会话的用户身份登录。
如果用于 VNC 会话的网络接口受防火墙保护,则需要手动打开防火墙中您的会话所使用的端口。如果启动多个会话,还可以选择打开一个端口范围。有关如何配置防火墙的细节,请参见Chapter 16, Masquerading and Firewalls。
vncserver
对显示器:1
使用端口5901
,对显示器:2
使用端口5902
,依次类推。对于永久会话,VNC 显示器和 X 显示器通常具有相同编号。要其他具有 1024x769 像素和颜色深度为 16 的会话,请输入以下命令:
vncserver -alwaysshared -geometry 1024x768 -depth 16
vncserver
命令会在您未指定时选取一个未使用的显示编号,并打印输出它的选择。有关更多选项,请参见man 1 vncserver
。
当您首次运行 vncserver
时,它会要求您输入一个口令,以获取会话的完全访问权限。如果需要,还可以提供口令用于会话的仅查看访问。
这里提供的口令还用作同一用户将来启动会话的口令。这些口令可以用 vncpasswd
命令更改。
确保使用长度够长的高强度口令(八个或更多字符)。不要共享这些口令。
要终止会话,请从 VNC 查看器中关闭运行于 VNC 会话内的桌面环境,像您关闭普通本地 X 会话那样关闭它。
如果希望手动终止会话,请在 VNC 服务器上打开外壳并确保您已作为拥有要终止的 VNC 会话的用户登录。运行以下命令来终止在显示器 :1
上运行的会话:vncserver -kill :1
8.4.1.1 配置持续 VNC 会话 #
通过编辑 $HOME/.vnc/xstartup
可以配置持续 VNC 会话。默认情况下,此外壳脚本会启动它启动时所处的同一个 GUI/窗口管理器。在 SUSE Linux Enterprise Server 中,此 GUI/窗口管理器为 GNOME 或 IceWM。如果要使用您选择的窗口管理器启动会话,请设置变量 WINDOWMANAGER
:
WINDOWMANAGER=gnome vncserver -geometry 1024x768 WINDOWMANAGER=icewm vncserver -geometry 1024x768
持续 VNC 会话在单个按用户配置中进行配置。由同一个用户启动的多个会话都使用相同的启动文件和口令文件。
8.4.2 使用 vncmanager
启动的 VNC 会话 #
启动
› › 。激活
。如果您打算在 Web 浏览器窗口中访问 VNC 会话,请激活
。如果需要,还可以选中
(例如,当网络接口配置为在外部区域中时)。如果有多个网络接口,请通过 将打开防火墙端口限制为特定的接口。单击
确认您的设置。如果不是所有需要的包都可使用,则需要批准安装缺少的包。
提示:重启动显示管理器YaST 对显示管理器设置进行了更改。您需要注销当前图形会话并重启动显示管理器,以使更改生效。
8.4.2.1 配置持续 VNC 会话 #
按过程 8.3 “启用持续 VNC 会话”中所述启用 VNC 会话管理后,便可以使用您喜欢的 VNC 查看器(例如 vncviewer
或 Remmina)正常连接到远程会话。此时将显示登录屏幕。登录后,您桌面环境的系统托盘中将出现“VNC”图标。单击该图标可打开 窗口。如果该图标未出现,或者您的桌面环境不支持图标放在系统托盘中,请手动运行 vncmanager-controller
。
有几个设置会影响 VNC 会话的行为:
这相当于一次性会话。其他用户将看不到此会话,它在您断开连接后即会终止。有关更多信息,请参考第 8.3 节 “一次性 VNC 会话”。
其他用户可以看见此类会话,它在您断开连接后仍保持运行。
您可以在此处指定持续会话的名称,以便在重新连接时可以轻松识别它。
任何人不必使用用户身份凭证登录即可访问会话。
需要使用有效的用户名和口令登录后才能访问会话。该选项会在
文本框中列出有效的用户名。防止多个用户同时加入该会话。
允许多个用户同时加入持续会话。适合用于远程演示或培训。
单击
进行确认。8.4.2.2 加入持续 VNC 会话 #
按第 8.4.2.1 节 “配置持续 VNC 会话”中所述设置持续 VNC 会话后,可通过 VNC 查看器加入它。当 VNC 客户端连接到服务器后,系统将提示您选择是要创建新会话还是加入现有会话:
当您单击现有会话的名称后,系统可能要求您输入登录身份凭证,具体取决于持续会话设置。
8.5 加密 VNC 通讯 #
如果 VNC 服务器设置正确,则 VNC 服务器与客户端之间的所有通讯都会被加密。身份验证在会话开始时进行;实际的数据传输在身份验证后开始。
无论是一次性还是持续 VNC 会话,安全性选项都通过 server_args
行中 /usr/bin/Xvnc
命令的 -securitytypes
参数配置。-securitytypes
参数会选择身份验证方法和加密。它的选项如下:
- None、TLSNone、X509None
无身份验证。
- VncAuth、TLSVnc、X509Vnc
身份验证使用自定义口令。
- Plain、TLSPlain、X509Plain
身份验证使用 PAM 来验证用户的口令。
- None、VncAuth、Plain
不加密。
- TLSNone、TLSVnc、TLSPlain
匿名 TLS 加密。对所有内容加密,但不校验远程主机。因此,您可以防护被动攻击者,但不能防御中间人攻击者。
- X509None、X509Vnc、X509Plain
使用证书进行 TLS 加密。如果使用自我签名证书,则在第一次连接时,系统将要求您校验证书。在以后的连接中,仅当证书有变动时,系统才会向您发出警告。因此,在第一次连接时,您可以防御中间人攻击之外的所有其他攻击(类似于使用典型的 SSH)。如果使用由证书颁发机构签名且与计算机名称匹配的证书,您的安全将得到全面保障(类似于使用典型的 HTTPS)。
提示:证书和密钥的路径如果使用基于 X509 的加密,需要通过
-X509Cert
和-X509Key
选项指定 X509 证书和密钥的路径。
如果您选择多种安全性类型(用逗号分隔),将会使用客户端和服务器都支持且允许的第一种安全性。如此,您便可在服务器上配置随机加密。如果您需要支持不支持加密的 VNC 客户端,此功能将十分有用。
在客户端上,您也可以指定允许的安全性类型,以防在您连接到已知启用了加密的服务器时遭到降级攻击(虽然在该情况下,我们的 vncviewer 会发出“连接未加密!”讯息来警告您)。