作者:David Mertz
有关 VNC、Desktop On-Call、远程 X 和安全性的更多内容
本文是两篇比较 SSH、远程 X、VNC 和其它技术作为远程运行应用程序方法的文章的第 2 部分。在这一部分中,David 研究了一些 VNC 配置问题,提到了 IBM 的 Desktop On-Call,介绍了远程 X 并讨论了一些有关安全性的问题。
在有关共享计算机的这两篇文章中的第 1 部分中,我描述了我的异构本地网络以及如何使用它来比较和测试不同操作系统和体系结构上的应用程序。有几种技术使一台工作站上的用户可以运行位于另一台工作站上的应用程序。SSH 提供到远程计算机的文本终端;可以使用 X Window 系统在一个并未实际运行交互式应用程序的工作站上显示该应用程序;VNC 可以作为对整个远程台式机的“遥控器”。
每种技术都有优缺点。它们都在 Linux 上运行,但不同变体(主机或远程)都允许与异构网络的其它各种 OS 环境进行交互。使用这些工具的组合,我可以坐在一台工作站(比方说,具有最好的显示器、键盘和椅子的那一台)上,然后运行和测试多个平台上的应用程序并对它们设定运行时间 ― 通常不用重新引导任何系统。
第 1 部分介绍了 SSH 和 VNC。第 2 部分将更多地讨论 VNC,然后再讨论远程 X 和安全性。
我的网络设置
我的本地网络上有七个节点,分别命名为 Apollo、Bacchus、Chaos、Delphi、Echo、Fury 和 Gaia。按所列的次序为这些节点分配了从 192.168.1.101 到 192.168.1.107 的本地 IP 地址。大多数情况下,同一物理机器在多重引导到不同 OS 时总是获得相同的 IP 地址(但有时我使用 DHCP,它分配 192.168.1.200 以上的地址)。整个网络位于一个硬件防火墙/路由器后,而且我充分信任防火墙,以至于对于运行在本地机器上的服务,我也许并没有象应有的那样猜疑提防。需要在公共因特网上共享计算机的读者应该比我更担心安全性问题。上面的详细信息将让读者理解下面给出的一些 shell 示例。我实际坐在 Bacchus 面前,它的 IP 地址是 192.168.1.102。
配置 VNC
在第 1 部分中,我演示了如何在 Linux 平台上启动 VNC,并且考虑了一些有关屏幕分辨率和颜色深度的问题,但没有考虑有关配置和使用 VNC 的一些重要内容。本文只集中讨论类 UNIX 的 Xvnc 服务器的使用。除了实现配置不同外,其它系统都有相似的概念,它们通常通过菜单和对话框,而不是通过命令行和配置文件进行配置。
当 vncserver 首次运行在一个给定的用户帐户内时,它要求您指定 VNC 客户机连接需要的密码。另外,创建了一些缺省配置文件。请看一下它的首次运行:
创建缺省 VNC 配置
[vnc-user@fury vnc-user]$ vncserver
You will require a password to access your desktops.
Password:
Verify:
New 'X' desktop is fury.gnosis.lan:3
Creating default startup script /home/vnc-user/.vnc/xstartup
Starting applications specified in /home/vnc-user/.vnc/xstartup
Log file is /home/vnc-user/.vnc/fury.gnosis.lan:3.log
这里,我创建了一个 VNC 会话。尽管在命令行上没有指定别的分辨率,将使用缺省分辨率。缺省分辨率是 1024 x 768,而缺省颜色深度是 8 位。第 1 部分演示了如何创建使用其它分辨率的脚本文件。
一开始要注意的事情是在首次运行期间创建的 ~/.vnc/xstartup 文件。该文件控制创建 VNC 会话时发生的事情 ― 最需注意的是使用哪个窗口管理器。首次创建 ~/.vnc/xstartup 时,指定的窗口管理器是 twm,它是一个极小的窗口管理器,几乎每台 X Window 系统机器上都有 twm。从好的方面讲,twm 的极小本质几乎使它可能成为运行 VNC 的最为“带宽友好”的方法。从坏的方面讲,twm 不具备完整“桌面管理器”(象 KDE、GNOME 或 WindowMaker)的大部分花哨功能。许多用户都想要编辑他们的 xstartup。下面是我修改过的示例:
定制的 VNC“启动”
#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
#exec wmaker
exec startkde
在上面的示例中,我注释掉了缺省 twm 和 xterm 的缺省启动。我还注释掉了我曾使用了一段时间的 WindowMaker 的启动。实际上我并没有删除那些行,以防以后想要恢复它们。我利用这个帐户实际上是为了启动 KDE。不过,我配置了这个特殊的 KDE 桌面来避免背景和标题栏上的颜色渐变,并使用极少的动画效果。使桌面的繁忙程度最小化可使 KDE 在通道带宽上变得更宽松。相似的原理适用于您所喜欢的任何一个窗口管理器。
最后要注意的是杀死已启动的 VNC 会话。需要在服务器端完成这个任务(包括从 vncviewer 窗口,一旦杀死该服务器,该窗口将切断连接;但这不会引起任何损害)。查看已经启动了哪些 VNC 会话的快速方法是使用 ps -ax | grep vnc。如果您想结束某个会话,可以使用 Linux 的 kill 命令,但这会留下一些悬而未决的信号文件,需要您稍后手工删除它们。更干净的方法通常是使用 vncserver -kill :1 - 但如果要从 root 帐户强制杀死用户 VNC 进程,则使用 kill 命令。
Desktop On-Call 和 eComStation
developerWorks 上我写的“可爱的 Python”专栏和这两篇文章的读者可能已经对我偶然提及 OS/2 的使用稍感惊讶,因为使用它的人数已在几年内逐步减少(甚至在 IBM 内部更是如此)。我的“正式”说法是大概观察到:OS/2 Warp 的 Workplace Shell 仍远远领先于已经在 Linux、Windows、MacOS 或者甚至是 BeOS 上出现的任何 GUI。WPS 确实很好,但我继续使用的实际原因主要是我这部分的惯性使然。好几年以来,我构建了我所熟悉并很适合在 OS/2 上使用的大型工具集,而且它们彼此工作得很好。当引导到其它系统时,我从来没有设法填补日常使用的所有不足(90% 的快乐仍需来源于偶然的重新引导)。
由于我的倔强,最近我因接收到一份 Serenity 系统的 eComStation 评估员副本而激动,它是由第三方获许可者对 IBM 的 Warp 4.5/Workspace on Demand 所做的增强和重新绑定。eComStation(eCS)只是今年才发行的,它包括“Warp 核心”的所有最新补丁和大量额外工具。
与 eCS 包括在一起的工具之一是名为“Desktop On-Call (DToC)”的 IBM 产品。还有 Windows 和 Linux 版的 DToC 服务器,但很难在美国买到。DToC 所做的事情很象 VNC 所做的。DToC 服务器依附 HTTP 协议上(缺省情况下,使用端口 80),以通过网络(LAN 或因特网)为“远程台式机”提供服务。DToC 的客户机应用程序是任何启用了 JavaScript 和 Java 的 Web 浏览器。与使用 VNC Java 客户机一样,Web 浏览器基本上是至 DToC 的连接接口。而且,DToC 也有与 VNC 完全相同的问题:本地捕捉的击键、多键序列和带宽/分辨率权衡问题。
与 VNC 相比,DToC 有两个优点。安全性问题被集成到 DToC 中,而不是通过需要分别配置的其它层和转换。依附在 HTTP 上意味着 DToC 比 VNC 更容易通过防火墙(但这有利有弊)。此外,您会在 DToC 内部获得文件传送接口,所以只要 DToC 在运行,就无须在服务器上运行单独的 FTP、Samba、NFS 或类似的文件传送服务器。从不利方面看,总的说来,比起 VNC,DToC 感觉上响应较慢 ― 这并不可怕,但少许差了点。
与 eCS 绑在一起的另一个工具是名为 Hoblink X11 的 X 服务器。我至今还未对它进行过实验,但当我对它进行实验时,这可能会使得为我本地网络的 OS/2 节点带来更好的集成(但还是 Linux “良好合作”做得最好)。
远程 X Window 系统
X Window 系统是响当当的软件思想。尤其知道它首次于 1984 年发明(在 Microsoft Windows 1.0 之前且刚好在第一台 Macintosh 之后的一小段时间)就更了不起了。对于大多数 Linux 用户而言,X Window 系统(或“X11”,但正确地讲不是“X Windows”)可能只是其窗口管理器为在本地显示 GUI 应用程序而调用的 API。但实际上 X11 是更有趣的东西。
X11 总是有一个客户机和一个服务器,即使当它们都运行在同一台实际机器上。X 客户机和 X 服务器或许会与人们最初认为它们是服务器或客户机的想法相反。X 服务器是乐意为底层的应用程序提供显示能力的设备。X 客户机是一种希望某个 X 服务器向它提供放置其可视输出的地方的特殊应用程序。
在本地工作站上运行时,服务器和客户机完全在一个内部通道上通信。但当涉及到本地和远程机器时,本地机器通常是 X 服务器,而远程机器通常是 X 客户机。然而,有时候您可能想要在您不在的工作站上显示某些信息,角色可能会颠倒。
X Window 系统本身实际只是一个具有诸如“在这些坐标上绘制一个窗口”等调用的 API。为了实际让 X Window 系统做更多的事情,通常在它的上面运行一个窗口管理器,让您做一些如移动窗口、使它们最小化和启动新的 X 客户机等事情。
让我们看一下如何启动一个远程应用程序(X 客户机),以使它在本地工作站上显示。用于演示的所有机器都是 Linux,但其它具有 X 服务器和客户机的系统将以相似的方式工作。首先,我们要决定本地机器使用的 IP 地址;ifconfig 是完成这个任务的好工具:
查找本地机器(X 服务器)的 IP 地址
[root@bacchus /root]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:48:54:83:82:AD
inet addr:192.168.1.102 Bcast:192.168.1.255 Mask:255.255.255.0