作者: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