Remmina 连接到 Ubuntu 18.10,但 TigerVNC 查看器给出“没有匹配的安全类型”错误

bgo*_*odr 4 vnc vncviewer 18.10

(我不是在寻找诸如“停止使用 VNC,因为它不安全”之类的答案,也不需要推荐不同 VNC 实现的答案,因为我特别想让 TigerVNC 正常运行)。

我需要使用 TigerVNC 从 Ubuntu 18.10 笔记本电脑显示和控制 Ubuntu 18.10 桌面。两台机器最近都升级到了18.10。

我已通过https://askubuntu.com/a/1088328中的说明在桌面上启用了桌面共享, 但有以下例外:当我未执行以下命令时:

gsettings set org.gnome.Vino require-encryption false
Run Code Online (Sandbox Code Playgroud)

它不起作用(见下文)。但是,当我桌面上使用该gsettings 命令时,我会收到输入 vnc 密码的提示,输入密码后,我就可以控制桌面。所以最终,我知道这一定是解决办法,但我特别需要知道为什么需要这样做(请参阅下面的 remmina 用法)。我的网络搜索都没有提供原因的答案。

在台式机上,共享设置为:

桌面上的共享设置

注意:我可以成功使用remmina工具,使用VNC设置,连接到台式机并显示它,而无需gsettings在台式机上使用上述设置。但是,当我使用 TigerVNC 类型的 vncviewer 时,使用以下命令:

vncviewer thedesk.local:0
Run Code Online (Sandbox Code Playgroud)

(其中 thedesk.local 是 Ubuntu 桌面计算机),我收到一个弹出窗口:

No matching security types
Run Code Online (Sandbox Code Playgroud)

shell 中的输出显示:

$ vncviewer thedesk.local:0

TigerVNC Viewer 64-bit v1.9.0
Built on: 2018-07-29 13:31
Copyright (C) 1999-2018 TigerVNC Team and many others (see README.rst)
See http://www.tigervnc.org for information on TigerVNC.

Sun May 26 07:10:29 2019
 DecodeManager: Detected 8 CPU core(s)
 DecodeManager: Creating 4 decoder thread(s)

Sun May 26 07:10:30 2019
 CConn:       connected to host thedesk.local port 5900

Sun May 26 07:10:31 2019
 CConnection: Server supports RFB protocol version 3.7
 CConnection: Using RFB protocol version 3.7
 CConnection: No matching security types
 CConn:       No matching security types
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 18.10 笔记本电脑和台式机上,我安装了这些类似 vnc 的软件包版本,apt remove-ing 所有其他版本的“vnc”客户端/服务器,以避免与 Linux“替代品”机制混淆:

$ dpkg --list *vnc* | grep '^i'
ii  libvncclient1:amd64                            0.9.11+dfsg-1.1ubuntu0.1     amd64                        API to write one's own VNC server - client library
ii  remmina-plugin-vnc:amd64                       1.2.31.4+dfsg-1ubuntu1       amd64                        VNC plugin for Remmina
ii  tigervnc-common                                1.9.0+dfsg-1                 amd64                        Virtual network computing; Common software needed by servers
ii  tigervnc-standalone-server                     1.9.0+dfsg-1                 amd64                        Standalone virtual network computing server
ii  tigervnc-viewer                                1.9.0+dfsg-1                 amd64                        Virtual network computing client for X
$ vncviewer --version |& head -5

TigerVNC Viewer 64-bit v1.9.0
Built on: 2018-07-29 13:31
Copyright (C) 1999-2018 TigerVNC Team and many others (see README.rst)
See http://www.tigervnc.org for information on TigerVNC.
$ 
Run Code Online (Sandbox Code Playgroud)

remmina --version弹出一个对话框,内容如下:

1.2.31.4 (git n/a)
Run Code Online (Sandbox Code Playgroud)

remmina 参与的原因只是为了表明某些客户端能够与 Ubuntu 桌面对话,但 TigerVNC 不行。我尝试从运行 Raspbian 的 Raspberry Pi 3 B+ 连接到 thedesk.local,并收到不同的错误,但似乎仍然涉及 VNC 实现之间的安全协议的类似不兼容性。错误是:

RPI VNC 尝试

那么,remmina 向在 thedesk.local 的 display :0 上运行的 X 服务器(或 VNC 服务器?)提供什么,而 TigerVNC 查看器客户端(或在 Raspbian 下运行的 RealVNC 客户端)没有提供?

我的网络搜索显示了诸如 https://ubuntuforums.org/showthread.php?t=2384046之类的结果,其中给出了“你为什么不做‘X’呢?” 类型的响应,这是一个公平的观察。但我特别想找出为什么我必须使用更改gsettings才能让 TigerVNC 查看器弹出提示,而 remmina 不需要它。(当我需要安全性时,我已经知道如何通过 SSH 传输流量。)

小智 5

显然有两种完全不同的加密协议可用于 VNC。根据《网络安全评估:了解你的网络》,表7-31有:

- type 18: TLS authentication, used by Ubuntu Linux distributions
- type 19: TLS authentication, used by the Win32 VeNCrypt package
Run Code Online (Sandbox Code Playgroud)

(不知道为什么这本书在这里明确提到“Ubuntu”作为类型 18)。

Vino(Gnome 桌面共享应用程序)使用LibVNCServer作为后端。并且 LibVNCServer仅支持类型 18。Remmina 也使用 LibVNCServer,因此它也支持类型 18。顺便说一句,由于 Remmina 是一个 VNC客户端,我猜它甚至支持类型 19。

另一方面,TigerVNC显然不支持类型 18,但支持类型 19;至少源代码是这么建议的。

这两个工具实际上可以通信的原因gsettings set org.gnome.Vino require-encryption false是该命令关闭了 Vino 中的加密,因此 TigerVNC 将仅使用未加密的连接(这是两个工具都支持的协议)。

要真正解决此问题,LibVNCServer 需要添加对类型 19 (VeNCrypt) 的支持,或者 TigerVNC 需要添加对类型 18 的支持。我不知道这两个项目是否正在进行任何此类工作。

旁注:我想这整个情况变得更加复杂,因为这两个方案都有点称为“TLS”,并且实际上在底层使用了 TLS,但仍然不兼容。对于 18 型,甚至没有实际的名称;而类型19/VeNCrypt本身有九种不同的子类型,用于不同的加密方法。根据我的经验,这整个混乱局面非常具有代表性的 VNC 协议。