2001 年 12 月 01 日
本文是兩篇比較 SSH、遠(yuǎn)程 X、VNC 和其它技術(shù)作為遠(yuǎn)程運(yùn)行應(yīng)用程序方法的文章的第 2 部分。在這一部分中,David 研究了一些 VNC 配置問題,提到了 IBM 的 Desktop On-Call,介紹了遠(yuǎn)程 X 并討論了一些有關(guān)安全性的問題。
在有關(guān)共享計(jì)算機(jī)的這兩篇文章中的
第 1 部分中,
我描述了我的異構(gòu)本地網(wǎng)絡(luò)以及如何使用它來比較和測(cè)試不同操作系統(tǒng)和體系結(jié)構(gòu)上的應(yīng)用程序。
有幾種技術(shù)使一臺(tái)工作站上的用戶可以運(yùn)行位于另一臺(tái)工作站上的應(yīng)用程序。SSH
提供到遠(yuǎn)程計(jì)算機(jī)的文本終端;可以使用 X Window 系統(tǒng)在一個(gè)并未實(shí)際運(yùn)
行交互式應(yīng)用程序的工作站上顯示該應(yīng)用程序;VNC 可以作為對(duì)整個(gè)遠(yuǎn)程臺(tái)式機(jī)的“遙控器”。
每種技術(shù)都有優(yōu)缺點(diǎn)。它們都在 Linux 上運(yùn)行,
但不同變體(主機(jī)或遠(yuǎn)程)都允許與異構(gòu)網(wǎng)絡(luò)的其它各種 OS 環(huán)境進(jìn)行交互。
使用這些工具的組合,我可以坐在一臺(tái)工作站(比方說,具有最好的顯示器、鍵盤和椅子的那一臺(tái))上,然后運(yùn)行和測(cè)試多個(gè)平臺(tái)上
的應(yīng)用程序并對(duì)它們?cè)O(shè)定運(yùn)行時(shí)間 ― 通常不用重新引導(dǎo)任何系統(tǒng)。
第 1 部分介紹了 SSH 和 VNC。第 2 部分將更多地討論 VNC,然后再討論遠(yuǎn)程 X 和安全性。
我的網(wǎng)絡(luò)設(shè)置
我的
本地網(wǎng)絡(luò)上有七個(gè)節(jié)點(diǎn),分別命名為 Apollo、Bacchus、Chaos、Delphi、Echo、Fury 和
Gaia。按所列的次序?yàn)檫@些節(jié)點(diǎn)分配了從 192.168.1.101 到 192.168.1.107 的本地 IP
地址。大多數(shù)情況下,同一物理機(jī)器在多重引導(dǎo)到不同 OS 時(shí)總是獲得相同的 IP 地址(但有時(shí)我使用 DHCP,它分配
192.168.1.200
以上的地址)。整個(gè)網(wǎng)絡(luò)位于一個(gè)硬件防火墻/路由器后,而且我充分信任防火墻,以至于對(duì)于運(yùn)行在本地機(jī)器上的服務(wù),我也許并沒有象應(yīng)有的那樣猜疑提防。需
要在公共因特網(wǎng)上共享計(jì)算機(jī)的讀者應(yīng)該比我更擔(dān)心安全性問題。上面的詳細(xì)信息將讓讀者理解下面給出的一些 shell 示例。我實(shí)際坐在
Bacchus 面前,它的 IP 地址是 192.168.1.102。
配置 VNC
在
第 1 部分中,
我演示了如何在 Linux 平臺(tái)上啟動(dòng) VNC,并且考慮了一些有關(guān)屏幕分辨率和顏色深度的問題,
但沒有考慮有關(guān)配置和使用 VNC 的一些重要內(nèi)容。
本文只集中討論類 UNIX 的
Xvnc
服務(wù)器的使用。除了實(shí)現(xiàn)配置不同外,其它系統(tǒng)都有相似的概念,它們通常通過菜單和對(duì)話框,而不是通過命令行和配置文件進(jìn)行配置。
當(dāng)
vncserver
首次運(yùn)行在一個(gè)給定的用戶帳戶內(nèi)時(shí),它要求您指定 VNC 客戶機(jī)連接需要的密碼。另外,創(chuàng)建了一些缺省配置文件。請(qǐng)看一下它的首次運(yùn)行:
創(chuàng)建缺省 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
|
這里,我創(chuàng)建了一個(gè) VNC 會(huì)話。盡管在命令行上沒有指定別的分辨率,將使用缺省分辨率。
缺省分辨率是 1024 x 768,而缺省顏色深度是 8 位。
第 1 部分演示了如何創(chuàng)建使用其它分辨率的腳本文件。
一開始要注意的事情是在首次運(yùn)行期間創(chuàng)建的
~/.vnc/xstartup
文件。
該文件控制創(chuàng)建 VNC 會(huì)話時(shí)發(fā)生的事情 ― 最需注意的是使用哪個(gè)窗口管理器。
首次創(chuàng)建
~/.vnc/xstartup
時(shí),指定的窗口管理器是
twm
,
它是一個(gè)極小的窗口管理器,幾乎每臺(tái) X Window 系統(tǒng)機(jī)器上都有 twm。從好的方面講,
twm
的極小本質(zhì)幾乎使它可能成為運(yùn)行 VNC 的最為“帶寬友好”的方法。從壞的方面講,
twm
不具備完整“桌面管理器”(象 KDE、GNOME 或 WindowMaker)的大部分花哨功能。
許多用戶都想要編輯他們的
xstartup
。下面是我修改過的示例:
定制的 VNC“啟動(dòng)”
#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
#exec wmaker
exec startkde
|
在上面的示例中,我注釋掉了缺省
twm
和
xterm
的缺省啟動(dòng)。我還注釋掉了我曾使用了一段時(shí)間的 WindowMaker 的啟動(dòng)。
實(shí)際上我并沒有刪除那些行,以防以后想要恢復(fù)它們。
我利用這個(gè)帳戶實(shí)際上是為了啟動(dòng) KDE。不過,我配置了這個(gè)特殊的 KDE 桌面
來避免背景和標(biāo)題欄上的顏色漸變,并使用極少的動(dòng)畫效果。使桌面的繁忙程
度最小化可使 KDE 在通道帶寬上變得更寬松。相似的原理適用于您所喜歡的任何一個(gè)窗口管理器。
最后要注意的是殺死已啟動(dòng)的 VNC 會(huì)話。
需要在服務(wù)器端完成這個(gè)任務(wù)(包括從
vncviewer
窗口,一旦殺死該服務(wù)器,該窗口將切斷連接;但
這不會(huì)引起任何損害)。
查看已經(jīng)啟動(dòng)了哪些 VNC 會(huì)話的快速方法是使用
ps -ax | grep vnc
。
如果您想結(jié)束某個(gè)會(huì)話,可以使用 Linux 的
kill
命令,但這會(huì)留下一些懸而未決的信號(hào)文件,需要您稍后手工刪除它們。更干凈的方法通常是使用
vncserver -kill :1
- 但如果要從 root 帳戶強(qiáng)制殺死用戶
VNC 進(jìn)程,則使用
kill
命令。
Desktop On-Call 和 eComStation
developerWorks 上我寫的“可愛的 Python”專欄和這兩篇文章的讀者
可能已經(jīng)對(duì)我偶然提及 OS/2 的使用稍感驚訝,因?yàn)槭褂盟娜藬?shù)已在幾年內(nèi)
逐步減少(甚至在 IBM 內(nèi)部更是如此)。
我的“正式”說法是大概觀察到:OS/2 Warp 的 Workplace Shell 仍遠(yuǎn)遠(yuǎn)領(lǐng)先于已
經(jīng)在 Linux、Windows、MacOS 或者甚至是 BeOS 上出現(xiàn)的任何 GUI。WPS 確實(shí)很好,但我繼續(xù)使用的實(shí)際原因主要是我這部分的慣性使然。好幾年以來,我構(gòu)建了我所熟悉并很適合在 OS/2 上使用的大型工具集,而且它們彼此工作得很好。
當(dāng)引導(dǎo)到其它系統(tǒng)時(shí),我從來沒有設(shè)法填補(bǔ)日常使用的所有不足(90% 的快樂仍需來源于偶然的重新引導(dǎo))。
由于我的倔強(qiáng),最近我因接收到一份 Serenity 系統(tǒng)的 eComStation 評(píng)估員副本而激動(dòng),
它是由第三方獲許可者對(duì) IBM 的 Warp 4.5/Workspace on Demand 所做的增強(qiáng)和重新綁定。eComStation(eCS)只是今年才發(fā)行的,
它包括“Warp 核心”的所有最新補(bǔ)丁和大量額外工具。
與 eCS 包括在一起的工具之一是名為“Desktop On-Call (DToC)”的 IBM 產(chǎn)品。
還有 Windows 和 Linux 版的 DToC 服務(wù)器,但很難在美國(guó)買到。DToC 所做的事情很象 VNC 所做的。DToC
服務(wù)器依附 HTTP 協(xié)議上(缺省情況下,使用端口
80),以通過網(wǎng)絡(luò)(LAN 或因特網(wǎng))為“遠(yuǎn)程臺(tái)式機(jī)”提供服務(wù)。DToC
的客戶機(jī)應(yīng)用程序是任何啟用了 JavaScript 和 Java 的 Web 瀏覽器。與使用
VNC Java 客戶機(jī)一樣,Web 瀏覽器基本上是至 DToC 的連接接口。而且,DToC
也有與 VNC 完全相同的問題:本地捕捉的擊鍵、多鍵序列和帶寬/分辨率權(quán)衡問題。
與 VNC 相比,DToC 有兩個(gè)優(yōu)點(diǎn)。安全性問題被集成到 DToC 中,而不是通過需要分別配置的其它層和轉(zhuǎn)換。
依附在 HTTP 上意味著 DToC 比 VNC 更容易通過防火墻(但這有利有弊)。
此外,您會(huì)在 DToC 內(nèi)部獲得文件傳送接口,
所以只要 DToC 在運(yùn)行,就無須在服務(wù)器上運(yùn)行單獨(dú)的 FTP、Samba、NFS 或類似的文件傳送服務(wù)器。
從不利方面看,總的說來,比起 VNC,DToC 感覺上響應(yīng)較慢 ― 這并不可怕,但少許差了點(diǎn)。
與 eCS 綁在一起的另一個(gè)工具是名為 Hoblink X11 的 X 服務(wù)器。我至今還未對(duì)它進(jìn)行過實(shí)驗(yàn),
但當(dāng)我對(duì)它進(jìn)行實(shí)驗(yàn)時(shí),這可能會(huì)使得為我本地網(wǎng)絡(luò)的 OS/2 節(jié)點(diǎn)帶來更好的集成(但還是 Linux “良好合作”做得最好)。
遠(yuǎn)程 X Window 系統(tǒng)
X Window 系統(tǒng)是響當(dāng)當(dāng)?shù)能浖枷搿?
尤其知道它首次于 1984 年發(fā)明(在 Microsoft Windows 1.0 之前且剛好在第一臺(tái)
Macintosh 之后的一小段時(shí)間)就更了不起了。對(duì)于大多數(shù) Linux 用戶而言,X Window 系統(tǒng)(或“X11”,
但正確地講
不是“X Windows”)可能只是其窗口管理器為在本地顯示 GUI 應(yīng)用程序而調(diào)用的 API。
但實(shí)際上 X11 是更有趣的東西。
X11 總是有一個(gè)客戶機(jī)和一個(gè)服務(wù)器,即使當(dāng)它們都運(yùn)行在同一臺(tái)實(shí)際機(jī)器上。X 客戶機(jī)和 X
服務(wù)器或許會(huì)與人們最初認(rèn)為它們是服務(wù)器或客戶機(jī)的想法相反。X 服務(wù)器是樂意為底層的應(yīng)用程序提供顯示能力的設(shè)備。X 客戶機(jī)是一種希望某個(gè) X 服務(wù)器向它提供放置其可視輸出的地方的特殊應(yīng)用程序。
在本地工作站上運(yùn)行時(shí),服務(wù)器和客戶機(jī)完全在一個(gè)內(nèi)部通道上通信。
但當(dāng)涉及到本地和遠(yuǎn)程機(jī)器時(shí),本地機(jī)器通常是 X 服務(wù)器,而遠(yuǎn)程機(jī)器通常是 X 客戶機(jī)。
然而,有時(shí)候您可能想要在您不在的工作站上顯示某些信息,角色可能會(huì)顛倒。
X Window 系統(tǒng)本身實(shí)際只是一個(gè)具有諸如“在這些坐標(biāo)上繪制一個(gè)窗口”等調(diào)用的 API。
為了實(shí)際讓 X Window 系統(tǒng)做更多的事情,通常在它的上面運(yùn)行一個(gè)
窗口管理器,
讓您做一些如移動(dòng)窗口、使它們最小化和啟動(dòng)新的 X 客戶機(jī)等事情。
讓我們看一下如何啟動(dòng)一個(gè)遠(yuǎn)程應(yīng)用程序(X 客戶機(jī)),以使它在本地工作站上顯示。用于演示的所有機(jī)器都是 Linux,但其它具有 X 服務(wù)器和客戶機(jī)的系統(tǒng)將以相似的方式工作。首先,我們要決定本地機(jī)器使用的 IP 地址;
ifconfig
是完成這個(gè)任務(wù)的好工具:
查找本地機(jī)器(X 服務(wù)器)的 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
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:15933 errors:0 dropped:0 overruns:0 frame:0
TX packets:10426 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:10 Base address:0xe800
|
接下來,要確保遠(yuǎn)程機(jī)器上的應(yīng)用程序?qū)⒕哂惺褂帽镜?X 服務(wù)器的本地許可權(quán):
設(shè)置 X 服務(wù)器權(quán)限(首先全部除去)
[root@bacchus /root]# xhost -
access control enabled, only authorized clients can connect
[root@bacchus /root]# xhost +192.168.1.106
192.168.1.106 being added to access control list
|
接下來,需要能夠啟動(dòng)應(yīng)用程序以在遠(yuǎn)程機(jī)器上運(yùn)行。
我們
可能會(huì)轉(zhuǎn)到實(shí)際機(jī)器(或讓其他人轉(zhuǎn)去),但大多數(shù)情況下,打開遠(yuǎn)程
shell 會(huì)話是最簡(jiǎn)單的事情(這里,使用不安全的
telnet
方式):
連接到遠(yuǎn)程機(jī)器 Fury(X 客戶機(jī))
[root@bacchus /root]# telnet -l quilty 192.168.1.106
Trying 192.168.1.106...
Connected to 192.168.1.106.
Escape character is '^]'.
Password:
Last login: Tue Nov 27 18:07:51 from 192.168.1.201
|
如果一切都運(yùn)行正常,遠(yuǎn)程機(jī)器將自動(dòng)檢測(cè)正在連接的機(jī)器。有關(guān)在不正常情況下要做些什么事情的信息,則請(qǐng)參閱下面的內(nèi)容:
檢查 X 客戶機(jī) Fury 上的 DISPLAY 環(huán)境變量
[quilty@fury quilty]$ echo $DISPLAY
bacchus.gnosis.lan:0
|
現(xiàn)在,我們可以啟動(dòng) X 客戶機(jī)。對(duì)于本示例,使用普通的(但挺有意思的)應(yīng)用程序
xeyes
(它在屏幕上顯示一雙跟隨鼠標(biāo)光標(biāo)的眼睛):
在 X 客戶機(jī)上啟動(dòng)應(yīng)用程序以在 X 服務(wù)器上顯示
[quilty@fury quilty]$ xeyes &
[1] 9939
|
啟動(dòng)遠(yuǎn)程應(yīng)用程序時(shí)的一些故障
偶而,上述序列中的某些事情會(huì)發(fā)生故障。請(qǐng)看一下一些典型問題:
連接到遠(yuǎn)程機(jī)器 Delphi
[root@bacchus /root]# /usr/local/bin/ssh quilty@192.168.1.104
quilty@192.168.1.104's password:
Last login: Wed Nov 28 01:06:08 2001 from 192.168.1.201
Linux 2.2.19.
|
請(qǐng)嘗試執(zhí)行上面的序列:
檢查 X 客戶機(jī) Delphi 上的 DISPLAY 環(huán)境變量
quilty@delphi:~$ echo $DISPLAY
quilty@delphi:~$ xeyes &
[1] 17668
quilty@delphi:~$ Error: Can't open display:
[1]+ Exit 1 xeyes
|
由于沒有自動(dòng)檢測(cè)到
DISPLAY
環(huán)境變量的值,所以 X 客戶機(jī)不知道哪個(gè)服務(wù)器將為它提供顯示:
沒有(或錯(cuò)誤地)設(shè)置 DISPLAY,export 值
quilty@delphi:~$ export DISPLAY=192.168.1.102:0
quilty@delphi:~$ xeyes &
[1] 17669
quilty@delphi:~$ Xlib: connection to "192.168.1.102:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: 192.168.1.102:0
[1]+ Exit 1 xeyes
|
繼續(xù)前進(jìn),但 Bacchus 尚未授權(quán) Delphi 使用它的 X 服務(wù)器(我們需要切換到本地 xterm 來修正這個(gè)問題):
X 服務(wù)器拒絕連接;啟用它
[root@bacchus /root]# xhost +192.168.1.104
192.168.1.104 being added to access control list
|
一切都正常:
在 X 客戶機(jī)上啟動(dòng)應(yīng)用程序以在 X 服務(wù)器上顯示
quilty@delphi:~$ xeyes &
[1] 17670
|
安全性問題
在
第 1 部分中,
我曾經(jīng)提到 VNC 和遠(yuǎn)程 X11 在因特網(wǎng)通道上都是不安全的。整個(gè)遠(yuǎn)程顯示在
公共路由器上是在未經(jīng)加密的情況下傳輸?shù)摹?
我不擔(dān)心防火墻后面的專用 LAN。
但是,如果我想要使用這些技術(shù)在全世界范圍(或者甚至跨城市)共享遠(yuǎn)程計(jì)算機(jī),那么 VNC 或 X11
協(xié)議應(yīng)該被放置在 SSH 上。做到這一點(diǎn)真的沒有任何損失,而且 SSH 甚至(可選地)添加其自己的壓縮層來增強(qiáng)性能。
但是,您需要配置它。
要在 SSH 上配置 VNC,最好是閱讀文章“Making VNC more secure using SSH”(請(qǐng)參閱本文后面的
參考資料)。
這篇文章寫得很好,描述了我可能要講到的每一件事情。
將 X 放置在 SSH 上十分容易做到。假設(shè)正在使用 OpenSSH,
將需要修改名為
sshd_config
的文件來允許分層。
不同的 Linux 分發(fā)版將該文件放在稍微不同的地方。Mandrake 7.1
將它放在
/usr/local/etc/
;Slackware 7.0 使用
/etc/ssh/
。在任何情況下,
您都必須確保該文件包含下列內(nèi)容:
將需要重新啟動(dòng)
sshd
守護(hù)程序來激活該設(shè)置。
實(shí)際上,一旦正確配置了
sshd
,就可以更容易地啟動(dòng) X 客戶機(jī),以在本地 X 服務(wù)器上顯示:
對(duì)于 X 客戶機(jī)使用 sshd X11 轉(zhuǎn)發(fā)
[quilty@bacchus quilty]$ ssh -X quilty@192.168.1.104
quilty@192.168.1.104's password:
Last login: Fri Nov 30 16:53:03 2001 from 192.168.1.102
Linux 2.2.19.
quilty@delphi:~$ echo $DISPLAY
delphi:10.0
quilty@delphi:~$ xeyes &
[1] 201
|
請(qǐng)注意,即使已連接到 Delphi,
DISPLAY
變量仍似乎會(huì)指出 X 服務(wù)器在 Delphi 上。在某種程度上,就是這樣,正討論的 X 服務(wù)器是將顯示交付給適當(dāng)?shù)倪h(yuǎn)程計(jì)算機(jī)的 SSH 守護(hù)程序。
參考資料
IBM Desktop On-Call 參考資料
- IBM 在
Desktop On-Call for Multiplatforms V4頁(yè)面上提供了 Desktop On-Call 的產(chǎn)品信息。
-
eComStation 是 IBM OS/2 Warp/Workspace on Demand 的重新綁定和增強(qiáng)版,
它特別強(qiáng)調(diào)了在異構(gòu)網(wǎng)絡(luò)環(huán)境中更好地運(yùn)行。
-
將 Desktop On-Call 版本作為 eComStation 的一部分提供的 Serenity 系統(tǒng)還提供了 DTOC v4.0 手冊(cè)的
在線版本。
X Window 系統(tǒng)參考資料
-
XFree86網(wǎng)站是查看與這一受歡迎的自由軟件 X Window 實(shí)現(xiàn)相關(guān)的所有信息的好地方。
- 從技術(shù)上講,XFree86 是正式的 X Window 系統(tǒng)的克隆(很象 Linux 是 UNIX 的“克隆”那樣)。
實(shí)際上,您不必?fù)?dān)心什么是正式的 - 所有版本彼此都會(huì)很好地合作。有關(guān)正式系統(tǒng)的信息(包括可用的源代碼),
請(qǐng)轉(zhuǎn)至
X.org 主頁(yè)。
- 還可以獲得 X Window 系統(tǒng)的許多商業(yè)實(shí)現(xiàn):
其它參考資料
關(guān)于作者