目的
了解如何使用 vnc 协议和 x11vnc 应用程序共享桌面
要求
- 已安装 x11vnc 软件包
约定
- #– 要求以 root 权限
直接以 root 用户身份或使用命令执行给定的命令sudo
- $– 给定的命令以常规非特权用户身份执行
介绍
虽然 ssh 是每个系统管理员的重要工具,它是最常用和最安全的远程管理协议,甚至能够通过 X11 转发授予对 X11 显示服务器的访问权限,但当所需目标是共享整个桌面会话时,它不是正确的工具。在这种情况下,协议就是我们的朋友。通过使用它,我们可以完全控制另一台机器,甚至可以共享键盘或鼠标事件。vnc
尽管 Gnu/Linux 上存在该
协议的许多实现,并且其中一些与特定的桌面环境集成,例如在 GNOME 中,但在本教程中,我们将重点介绍独立于桌面的应用程序的使用和设置。vino/vinagre
x11vnc
安装
该应用程序应该已经打包并可用于您最喜欢的分发存储库。在 Fedora 上安装它,只需运行:x11vnc
$ sudo dnf install x11vnc
在 Debian 或基于 Debian 的发行版上,要使用的命令是:
$ sudo apt-get install x11vnc
x11vnc 也可以在 Archlinux 仓库中找到。我们可以使用以下方法安装它:pacman
$ sudo pacman -S x11vnc
安装后,该程序可以直接从终端启动,也可以通过 GUI 使用应用程序菜单中的桌面启动器启动。
防火墙设置
为了能够使用 vnc 协议共享我们的桌面会话,我们必须设置防火墙,使其允许默认 vnc-server 端口端口上的传入连接。要执行的确切作取决于我们在系统中使用的防火墙软件。使用时,我们应该运行:5900
firewalld
$ sudo firewall-cmd --add-service=vnc-server
如您所见,我们实际上并没有直接指定要允许的端口:而是直接使用了服务名称,因为它默认与端口相关联。请记住,在使用 时,如果未使用选项指定区域,则指定的规则将应用于默认规则。firewalld
--zone
使用 Ubuntu 中的默认防火墙时,要使用的命令为:ufw
$ sudo ufw allow 5900/tcp
此外,如果我们打算允许来自本地网络之外的机器的 vnc 连接,我们应该为路由器中的同一端口配置允许规则,并设置到我们机器 IP 的 ip 转发。
熟悉 x11vnc
开始使用 x11vnc 最简单的方法是在终端中调用该程序,无需任何选项。必须在没有管理员权限的情况下启动该程序:
$ x11vnc
默认情况下,x11vnc 将使用 display ,但是,可以使用该选项来更改。:0
-display
运行上述命令后,我们收到的第一件事是关于不使用密码进行连接的警告。这是意料之中的,因为我们还没有设置任何设置。以这种设置运行是非常危险的,因为任何可以通过网络访问我们机器的计算机都有可能查看和控制我们的桌面。那么,我们需要做的第一件事是设置程序,以便在请求访问时需要身份验证。
使用密码限制访问
基本上有三种方式可以使用 x11vnc 设置身份验证,它们对应于 、 和 选项。让我们简要地看看它们如何修改程序的行为。-passwd
-storepasswd
-passwdfile
第一种方法通过使用选项表示,该选项让我们直接在终端中提供运行时、一次性、纯文本密码:它不会保存在任何地方,只会用于启动的会话。-passwd
第二种方法是使用选项:它接受两个可选参数: 和 ,分别指定密码和应存储它的文件。但是,如果不带参数使用,它将以交互方式提示输入密码,并将其存储在文件中。最后,如果该选项仅与一个参数一起使用,它将被解释为存储密码的文件。请注意,包含密码的文件不会被加密,而只是使用固定密钥进行混淆,因此只允许受信任的用户访问它。-storepasswd
pass
file
~/.vnc/passwd
保存密码后,程序将退出。从那一刻起,要启动受口令保护的 vnc 会话,必须发出以下命令:
$ x11vnc -rfbauth /path/to/passfile
其中,默认情况下,/path/to/passfile 将对应于 ~/.vnc/passwd。
我们的第三个选项是使用标志。通过使用它,通过读取现有文件的第一行(作为唯一的 option 参数传递)来设置连接的密码。可以通过在 file 参数前加上前缀来进一步修改该选项的行为。例如,如果文件名前缀为 ,则文件本身将在程序读取其内容后被删除。相反,当使用前缀时,在前缀后指定的字符串将被解释为外部命令,其输出将用作密码。其他前缀可与此选项一起使用。有关完整的参考,您可以查阅该程序的 manpage 。-passwdfile
rm:
cmd:
为仅限查看的会话提供密码
可以使用,因此创建的连接将在仅查看模式下运行。这意味着将只允许连接的客户端观察共享会话,但无法与之交互。要在此模式下运行,必须使用 选项启动程序。可以为这种访问设置密码 spefic,从而获得更精细的设置。要获得此结果,必须使用 option 并提供 password 作为字符串参数。但是,这要求使用我们上面讨论的选项提供完全访问密码。x11vnc
-viewonly
-viewpasswd
-passwd
使用加密隧道保护连接
默认情况下,vnc 连接未加密,这可能会带来安全风险。我们可以使用不同的方法来解决这个问题。第一个是使用(虚拟专用网络),第二个是使用 ssl 隧道,第三个是使用 .Vpn
ssh
虽然描述如何设置 vpn 不在本文的讨论范围之内,但我们很快就会看到如何实现其他两个选项。
使用 ssl/tls 隧道
我们可以使用 ssl 隧道加密 vnc 连接。为了能够实现这一点,我们必须使用 or 选项。前者需要 x11vnc 在 support 下编译。此选项接受一个参数,该参数是要使用的格式的证书。如果未提供此参数,并且我们的系统上安装了该实用程序,则将生成一个新证书并将其保存在 中。-ssl
-stunnel
libssl
pem
openssl
~/.vnc/certs/server.pem
相反,该选项依赖于使用外部程序来提供 ssl 连接。作为 -ssl,它还接受 pem 证书作为参数。如果未提供,将生成一个新的证书,并如上所述保存(但是,可以更改此行为,例如使用字符串作为参数 - 在这种情况下,将生成临时证书)。-ssltunnel
stunnel
TMP
请注意,在这两种情况下,自动生成的证书都将是自签名的,因此,尽管提供了安全连接,但它并不代表对中间人攻击的保护。生成证书时,系统会询问我们是否要提供密码来保护它,如果是这种情况,系统会提示我们插入它。
最后,为了能够使用 ssl 隧道,客户端应用程序必须支持 ssl。
使用 ssh 隧道
要使用 ssh 隧道,我们必须使用以下命令使用 ssh 启动 vnc 服务器(假设使用默认端口):
$ ssh -t -L 5900:localhost:5900 remote-machine 'x11vnc -localhost -display :0'
您可能熟悉 ssh,但让我们分析一下这个命令。首先,我们运行 ssh 选项,分配一个伪终端,对于这个选项,我们基本上说将本地(客户端)计算机上的端口转发到远程计算机上的相同端口。如您所见,x11vnc 命令是使用选项启动的。这基本上是只允许来自运行服务器的同一台机器的连接。使用 ssl 隧道时,也会自动使用此选项以避免绕过它。之后,我们可以在客户端上启动我们的 vncviewer:-t
-L
5900
-localhost
$ vncviewer -PreferredEncoding=ZRLE localhost:0
请注意,我们将首选编码设置为 ,这应该有助于提高 ssh 的性能。ZRLE
以图形模式运行
如前所述,也可以使用桌面启动器在图形模式下使用。默认情况下,程序将显示一个窗口,我们可以在其中选择要使用的端口以及其他选项:x11vnc
单击“确定”按钮后,系统托盘中将显示一个图标,并且屏幕上将出现一个包含其属性的窗口。在左侧将显示一些有用的说明,以便快速启动。从这个界面中,我们还可以选择 session-spefic 和 view-only 密码:
结论
虽然 Vnc 甚至不能替代 ssh,但它可能是用于某些特定任务的正确工具。在本教程中,我们了解了配置和使用服务器所需的基本步骤。虽然有许多替代方案可供选择,但 x11vnc 是一个非常简单且独立于桌面的工具,可以在任何地方使用。x11vnc