最近更新日期:2006/09/19
一部連上 Internet 上面的您的個人主機(jī),最重要的是什麼呢? 大概就是如何讓您自己可以連線進(jìn)入自己的主機(jī),並且進(jìn)行所謂的『遠(yuǎn)端操控』了吧! 也就是說,您可以在任何具有連上 Internet 的電腦中,以遠(yuǎn)端連線軟體連上 Internet ,並藉由您主機(jī)上面的遠(yuǎn)端連線伺服器軟體提供的功能,直接登入您的主機(jī)來進(jìn)行操控的工作!此時,您將發(fā)現(xiàn) Linux 有趣又好玩的地方囉!在早期的 Unix Like 機(jī)器當(dāng)中,幾乎都提供 Telnet 這個遠(yuǎn)端連線伺服器軟體,不過, Telnet 本身是以『明碼』來傳送您操作的資料,安全上面是值得來思考要不要開放吶! 這個時候就有需要瞭解一下傳送過程中以加密動作來傳送資料封包的 SSH 這個遠(yuǎn)端連線伺服器軟體啦! 另外,除了純文字介面登入主機(jī)來進(jìn)行操控之外,在現(xiàn)在的 Linux distributions 當(dāng)中, 還可以利用 X 相關(guān)的服務(wù)來幫助我們以圖形介面登入喔!很棒吧! ^_^ |
在這個章節(jié)當(dāng)中我們會使用用戶端的連線軟體連線到主機(jī)端來操作主機(jī),所以你必須要瞭解到你的主機(jī)防火牆必須要開放,並且要取消 SELinux 才行!另外,登入時會分析到的 PAM 模組也需要進(jìn)行瞭解吶!本章後半部會介紹 X Window 的遠(yuǎn)端登入,所以你也必須對於 X Server/client 的架構(gòu)有點(diǎn)瞭解才行。
遠(yuǎn)端連線伺服器對我們來說,可是一項(xiàng)很有用的工具??!他可以讓我們更方便的管理主機(jī)。不過,方便是方便,安全性其實(shí)不很好的~所以,才要特別強(qiáng)調(diào)一下這個玩意兒??!
什麼是遠(yuǎn)端連線伺服器首先,我們要先來瞭解一下,什麼是『
遠(yuǎn)端連線伺服器』?這個東西的功能為何?我想,您應(yīng)該已經(jīng)聽過,一個良好的網(wǎng)路環(huán)境當(dāng)中,一部開放到Internet 上面的伺服器,基本上,他可以不需要螢?zāi)弧㈡I盤、滑鼠等等的配備,只要有基本的主機(jī)板、CPU、RAM、硬碟再加上一塊好一點(diǎn)的網(wǎng)路卡,並且連上Internet !哈哈!那麼您要操控這部主機(jī)的時候,只要透過網(wǎng)路連線進(jìn)來,然後進(jìn)行任何修改即可!嘿!所以囉,這個時候主機(jī)自然不需要周邊設(shè)備啦!
以鳥哥個人為例,目前鳥哥管理大約七、八部左右的 Unix-Like 主機(jī),這些主機(jī)都不在同一個地方,分佈在南臺灣各處!那麼當(dāng)有新的套件的漏洞被發(fā)佈,或者是需要進(jìn)行一些額外的設(shè)定的時候,是否鳥哥本人一定要到現(xiàn)場嗎?當(dāng)然不需要,只要透過網(wǎng)路連線到該主機(jī)上面,就可以進(jìn)行任何工作了!真的就好像在主機(jī)前面工作一般的輕鬆愉快!^_^!這就是遠(yuǎn)端連線伺服器啦!
遠(yuǎn)端連線伺服器的功能當(dāng)然還不只如此!舉個例子來說:當(dāng)您的工作需要使用到Linux 的強(qiáng)大的編譯功能時,那麼您一定需要 Linux 對吧!而且最好是運(yùn)算速度快一點(diǎn)的主機(jī),這個時候您可以將您研究室最快的那一部主機(jī)開放出來,設(shè)定一下遠(yuǎn)端連線伺服器,讓您的學(xué)生啦,或者是研究室的同仁啦,可以透過這部機(jī)器幫他們進(jìn)行研究的工作,這個時候,您的主機(jī)就可以讓多人進(jìn)行分享Linux 運(yùn)算的功能啦!
在早期的網(wǎng)路世界裡,由於只有 Unix 機(jī)器,而且個人電腦還不流行的時候,想要使用大型主機(jī)來進(jìn)行數(shù)值程式的運(yùn)算時(在我們工程界,比較常使用Fortran 這一類的程式語言,至於 C 語言則較少碰~),就需要向?qū)W校單位申請 Unix 工作站的帳號,並且以遠(yuǎn)端連線程式連進(jìn)主機(jī),以使用Unix 的資源來進(jìn)行我們的數(shù)值模式運(yùn)算!所以啦,那個遠(yuǎn)端連線伺服器的設(shè)定,對於系統(tǒng)管理員是很重要的!尤其對於大型工作站類型的Unix-Like 主機(jī),由於很多人都需要使用到他的運(yùn)算功能,或者是他的編譯程式(compiler )來進(jìn)行運(yùn)算,這時的遠(yuǎn)端連線就更形重要啦!
那麼是否每一部連上 Internet 上面的主機(jī)都應(yīng)該要開放遠(yuǎn)端連線的功能呢?其實(shí)並不盡然,還是需要針對您的主機(jī)來進(jìn)行規(guī)劃的,我們底下分伺服器與工作站來說明:
伺服器類型( Server )的連線程式:在一般開放網(wǎng)際網(wǎng)路服務(wù)的伺服器中,由於開放的服務(wù)可能會有較為重要的資訊,而遠(yuǎn)端連線程式連進(jìn)主機(jī)之後,可以進(jìn)行的工作又太多了(幾乎就像在主機(jī)前面工作一般!),因此網(wǎng)際網(wǎng)路的遠(yuǎn)端連線程式通常僅針對少部分系統(tǒng)維護(hù)者開放而已!除非必要,否則Server 類型的主機(jī)還真的不建議開放連線的服務(wù)呢!以鳥哥為例,我的主機(jī)提供了我們研究室使用Mail 與 Internet 上面的 WWW 服務(wù),如果還主動提供遠(yuǎn)端連線的話,那麼萬一不小心被入侵,那可就傷腦筋了!因此,鳥哥僅開放『很小部分的網(wǎng)域』讓系統(tǒng)管理員連進(jìn)來,其他來源的 IP 一律抵擋!不許使用遠(yuǎn)端連線的功能呢!
工作站類型( Workstation )的連線程式:至於工作站的情況就跟伺服器不太一樣了!工作站常常僅針對內(nèi)部的幾個使用者開放而已,通常是不希望連上 Internet 的啦!而且所謂的工作站自然就是用來做工的!例如鳥哥的其中一部 Linux 就是專門用來進(jìn)行大型的數(shù)值模式計(jì)算模擬之用!這個時候的遠(yuǎn)端連線伺服器可能就得要對多人啟動了!因?yàn)楣ぷ髡镜膹?qiáng)大運(yùn)算功能可以讓很多人一同使用他的計(jì)算能力!而且也可以免除每部電腦都得要安裝compiler 的窘境!要知道,某些工程用的 compiler 是粉貴的~

有哪些可供登入的類型?那麼目前遠(yuǎn)端連線伺服器的主要類型有哪些?如果以顯示的類型來分類,基本上有文字介面與圖形介面兩種。
在文字類型登入方面的伺服器,主要有以『明碼』傳送資料的telnet 伺服器,及以加密技術(shù)進(jìn)行封包加密來傳送的 SSH 伺服器!雖然 telnet可以支援的 client 端軟體比較多,不過由於他是使用明碼來傳送資料,您的資料很容易遭到有心人士的擷?。∷越鼇砦覀兌己艋n大家多使用SSH 這一種連線方式,而捨棄掉 telnet 這個比較不安全的咚咚囉!
至於圖形介面的伺服器,比較簡單的有 Xdmcp ,架設(shè) Xdmcp 很簡單,不過 client 端的軟體比較少。另外一款目前很常見的伺服器,就是 VNC (Virtual Network Computing),透過 VNC server/client 軟體來進(jìn)行連接。圖形介面最大的優(yōu)點(diǎn)是『圖形』??!不過,因?yàn)槭峭高^圖形來傳送,傳輸?shù)馁Y料量相當(dāng)?shù)拇螅运俣扰c安全性都有待考量。因此,我們僅建議您將圖形介面的遠(yuǎn)端登入伺服器開放在內(nèi)部網(wǎng)域 (LAN) 就好了!
那麼什麼是『明碼』與『加密』的資料封包傳送模式呢?為什麼 telnet 使用明碼就比較不安全?所謂的明碼就是:『
當(dāng)我們的資料封包在網(wǎng)路上流竄時,該資料封包的內(nèi)容為資料的原始格式』,還記得我們在
網(wǎng)路常用指令章節(jié)當(dāng)中介紹的 tcpdump 吧?我們在 telnet 下達(dá)的指令與密碼等等,都會以類似 ASCII 的格式傳送到主機(jī)端,而主機(jī)端就藉由這些資料來下達(dá)指令。如果這些資料封包在經(jīng)過某些broadcast 或者是 Router 時,被有心人士捉去,那麼他將會完整的取得您的資料喔!所以啦,萬一您的資料封包裡面含有信用卡資料、密碼、身份確認(rèn)等重要資訊時,是否很危險吶?!因此,目前我們通常都希望使用可以將這些在網(wǎng)路上面跑的資料加密的技術(shù),以增加資料在Internet 上面?zhèn)魉偷陌踩园。?br>

Telnet 伺服器知道 telnet 是什麼嗎?咦!不就是連接 BBS 的工具嗎?沒錯!他確實(shí)也是BBS 軟體類的一個伺服器啦!不過這裡我們暫不玩弄 BBS ! telnet可以說是歷史相當(dāng)悠久的遠(yuǎn)端連線伺服器哩!而且支援他的軟體也相當(dāng)?shù)亩啵±缰膎etterm 就直接支援他啦!連線之後的界面也漂亮,在 client 端的中文傳輸與輸入也沒有問題!相當(dāng)?shù)牟诲e用!不過,他最麻煩的地方就是.....比較不安全而已啦~
底下我們談一談怎麼啟動與使用 telnet 伺服器吧!
安裝、啟動與關(guān)閉服務(wù)安裝:近年來由於 telnet 是以明碼在傳輸?shù)膯栴},所以在新的 Linux 版本上面,
已經(jīng)都將telnet 這個伺服器排除在『先發(fā)名單』之外啦,也就是說,很多 Linuxdistributions 預(yù)設(shè)是不安裝 telnet 的,不過,在每個主要的 Linux distributions
還是有提供telnet 套件在光碟當(dāng)中啦!所以您要拿出原版光碟,並且安裝好他就可以用啦!如何確認(rèn)是否已經(jīng)安裝了telnet 呢?最簡單的方法就是使用最廣泛被使用的 RPM 啦!
[root@linux ~]# rpm -qa | grep telnet telnet-0.17-31.EL4.3 telnet-server-0.17-31.EL4.3 # 上面是 CentOS 4.x 預(yù)設(shè)的套件版本。如果是其他的 distribution, # 檔名可能會不太一樣~可利用 yum 或 apt 等方式來安裝喔! |
需要特別留意的是,如果要提供 telnet 連線服務(wù),通常需要安裝兩個 RPM 喔:
- 一個是 telnet,這個套件提供的是 telnet 用戶端的連線程式;
- 另一個是 telnet-server 套件,這個才是真正的 Telnet server 軟體喔!
如果找不到 telnet-server 的話,請拿出原版光碟來安裝,或者直接使用 yum 吧!否則就無法進(jìn)行下一步的設(shè)定啦!^_^
啟動與關(guān)閉:還記得『
鳥哥的 Linux 私房菜 --基礎(chǔ)學(xué)習(xí)篇』裡面的『
認(rèn)識服務(wù)(daemon )』那個章節(jié)吧?要記得 super daemon 呦!因?yàn)槲覀兊膖elnet 就是掛在 super daemon 底下的一支服務(wù)而已!那個咚咚就是有名的 xinetd 囉!
Tips: 在某些舊版的套件上面也有使用 inetd 的,啟動的方式有點(diǎn)不太一樣,不過差異不大啦! 只要懂得基本的常識,那麼就不會有問題囉!所以鳥哥才會要大家先讀完 Linux 基礎(chǔ)篇 啦! | |
啟動的方式就是:
- 將 xinetd 裡面關(guān)於 telnet 的項(xiàng)目開啟,然後
- 重新啟動一次 xinetd 就成功啦!
那麼如何開啟 telnet 的項(xiàng)目呢?很簡單,有兩個方式:
- 使用 ntsysv 或 chkconfig:
還記得 Red Hat 系列(含 CentOS)的套件裡面的 ntsysv 這個好用的東西嗎?對了,在 CentOS 底下有這麼一個好用的設(shè)定工具,您可以使用 ntsysv 出現(xiàn)的視窗之中,將 telnet 勾選起來,然後按下 OK 離開即可囉!
- 使用 vi 修改 /etc/xinetd.d/telnet 這個檔案:
那麼如果不是 Red Hat 系列的 Linux 系統(tǒng)呢?基本上, ntsysv 也只是修改 /etc/xinetd.d 這個目錄下的資料而已,所以我們當(dāng)然可以手動自己修改他啦!
[root@linux ~]# vi /etc/xinetd.d/telnet service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID # disable = yes disable = no # 基本上,改上面這兩行就夠了!將 disable 設(shè)定成 no 表示要啟動! } |
設(shè)定完開啟之後,自然就是要啟動啦,剛剛提到
telnet 是掛在 xinetd 底下的,所以自然只要重新啟動 xinetd 就能夠?qū)?/etc/xinetd.d/ 裡頭的設(shè)定重新讀進(jìn)來, 所以剛剛設(shè)定啟動的 telnet 自然也就可以被啟動啦!而啟動的方式也有兩種方式,其中 service 這個指令僅支援在 CentOS 與 Mandriva 底下,所以通常鳥哥還是以 /etc/init.d 底下的 scripts 為啟動的主要方法啦!
僅適合 Red Hat 系列 / Mandriva 系列的主機(jī)啟動方式 [root@linux ~]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] 適合各版本的主機(jī)啟動方式 [root@linux ~]# /etc/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] # 某些版本並沒有 restart 的選項(xiàng),這個時候就需要:stop 再 start 囉! |
那麼要看有沒有啟動服務(wù)呢?怎麼看?其實(shí)也很簡單啦,還記得我們在前幾章提到的『
限制 Linux port 的連線 』那一章嗎?使用
netstat 就可以啦!
[root@linux ~]# netstat -tlup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:telnet *:* LISTEN 23817/xinetd |
看到了嗎?沒錯,那個 telnet 就是啟動的項(xiàng)目啦!那麼要如何關(guān)閉呢?呵呵! 那就真的是太簡單啦!就將剛剛的步驟再做一次,而將設(shè)定值轉(zhuǎn)變一下即可!步驟如下啦!
Tips: 這裡考一個問題,那個 port 對應(yīng)的服務(wù)名稱在哪一個檔案裡面查詢到的呢? 在每一個 Linux 系統(tǒng)都有的檔案呦!忘記了呀!?再回到前面看看 限制 Linux port 的連線 , 然後用 vi 去看看那一個檔案的內(nèi)容吧! ^_^ | |
Step 1: 修改設(shè)定檔 [root@linux ~]# vi /etc/xinetd.d/telnet service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = yes <== 就是這裡啦!將他改成 yes 就是關(guān)閉! } Step 2: 重新啟動 xinetd 這個 super daemon [root@linux ~]# /etc/init.d/xinetd restart |

好用的連線軟體 剛剛上面提到的都是在伺服器端的設(shè)定而已!那麼在客戶端有什麼好用的軟體可以連上 Server 的呢?最常見到的應(yīng)該就是 netterm 這個鼎鼎大名的連線軟體了吧! 我想,只要玩過 BBS 的大概都曉得這個軟體才對!所以這裡就不提了! 另外,目前幾乎所有的作業(yè)系統(tǒng)都提供了 telnet 這個程式,這個程式可以直接輕易的就連上 telnet server 呢!例如您要在 Linux 上面連上自己的 telnet 伺服器,可以這樣做:
[root@linux ~]# telnet localhost Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. CentOS release 4.4 (Final) Kernel 2.6.9-42.0.2.EL on an i686 login: dmtsai <== 就是這裡啦!請輸入『一般』帳號,不能用 root 喔! Password: <== 這裡輸入該帳號的密碼!請注意,輸入時,螢?zāi)徊粫腥魏钨Y訊! Last login: Fri Jul 1 09:31:21 from 127.0.0.1 <== 上次登入的資訊為何? [dmtsai@linux ~]$ <== 這裡就是已經(jīng)登入的地方!亦即遠(yuǎn)端主機(jī)了! [dmtsai@linux ~]$ exit <== 這樣就能夠離開 telnet 與遠(yuǎn)端主機(jī)咯! |
這樣就連線進(jìn)來啦!很簡單吧!那麼在 Windows 的環(huán)境底下呢?同樣的,也是可以使用 telnet 的程式連線到 Linux 的 telnet server 裡面來!沒有問題的啦!可以依序這樣做:
- 按下 Windows 內(nèi)的 『開始』
- 選擇 『執(zhí)行』
- 在出現(xiàn)的視窗中輸入 『telnet your.IP.or.hostname』
這樣就可以進(jìn)入 Linux 的環(huán)境中了!很方便吧!當(dāng)然啦!您也可以使用類似 netterm 這個很棒的連線軟體來連線的,這裡我們就不示範(fàn)啦!
Tips: 在 Linux tty1 ~ tty6 的終端機(jī)預(yù)設(shè)模式下,我們是沒有辦法看到中文的! 除非安裝某些特殊的中文介面才行!比如 JMCCE 之類的咚咚! 因?yàn)椴皇呛苤匾?,所以鳥哥這裡就不加介紹了。 ^_^ | |
另外,需要先留意的是,為了系統(tǒng)安全的考量,
預(yù)設(shè)的 telnet 是『不允許』使用 root 這個帳號登入的~ 這個很重要喔!您不要使用 root 嘗試登入 telnet ??! ^_^

iptables, TCP_Wrappers, 純建議 telnet 這個伺服器方便歸方便,但
總是一個不太好的連線解決方案, 因?yàn)楫吘顾且粋€以『明碼』傳輸?shù)膮f(xié)定,所以很不適合在 Internet 上面使用啦! 你總不希望你的帳號密碼在 Internet 上面被竊取吧?不過,如果 telnet 是啟動在內(nèi)部環(huán)境當(dāng)中那就還好啦! 尤其有些朋友因?yàn)榕f軟體的關(guān)係,還是需要使用到 telnet 來連線。那麼我們就提一些基本的注意事項(xiàng)好了!
以比較限制的設(shè)定檔來規(guī)範(fàn)連線的 IP : 事實(shí)上, xinetd 就已經(jīng)提供些許的保護(hù)措施了, 您可以針對您主機(jī)的多重介面(有對內(nèi)以及對外喔!)來提供不同保護(hù)等級的措施! 底下列出一個範(fàn)例,不過,更多的資訊請?jiān)倩氐健?a >鳥 哥的 Linux 私房菜 -- 基礎(chǔ)學(xué)習(xí)篇』當(dāng)中去查閱一下 『
認(rèn)識服務(wù) 』那一章裡面的詳細(xì)設(shè)定說明,或者直接 man xinetd.conf 吧!
[root@linux ~]# vi /etc/xinetd.d/telnet # This file had been modified by VBird 2002/11/04 # 首先為內(nèi)部網(wǎng)路的參數(shù)設(shè)定 service telnet { disable = no bind = 192.168.1.2 only_from = 192.168.1.0/24 # 上面這兩行說明僅提供內(nèi)部網(wǎng)域! instance = UNLIMITED nice = 0 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/telnetd server_args = -a none log_on_failure += USERID } # 再來則是針對外部網(wǎng)域的設(shè)定 service telnet { disable = no bind = 140.116.142.196 only_from = 140.116.0.0/16 no_access = 140.116.32.{10,26} # 上面這三行設(shè)定外部較為嚴(yán)格的限制 instance = 10 <==最多允許同時 10 個連線 umask = 022 nice = 10 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/telnetd server_args = -a none log_on_failure += USERID } |
root 不能直接以 telnet 連接上主機(jī): 既然 telnet 不是很安全,自然預(yù)設(shè)的情況之下就是無法允許 root 以 telnet 登入 Linux 主機(jī)的!但事實(shí)上, telnet 只是利用一些較為安全的機(jī)制 (其實(shí)就是 PAM 模組啦) 來防止 root 登入而已~所以囉,假如您確定您的環(huán)境夠安全(例如您的主機(jī)並沒有連上 Internet ),並且想要開放 root 以 telnet 登入 Linux 主機(jī)的話,請直接將 /etc/securetty 更改檔名即可!
[root@linux ~]# mv /etc/securetty /etc/securetty.bak |
這樣一來,root 就可以登入啦!不過,相當(dāng)?shù)牟唤ㄗh這樣做喔!畢竟不是很安全啦!此外,您也可以藉由修改 pam 模組來達(dá)成同樣的功能!修改 /etc/pam.d/login 這個檔案的第二行設(shè)定即可:
[root@linux ~]# vi /etc/pam.d/login #%PAM-1.0 #auth required pam_securetty.so <== 就是這樣一行,將他註解即可! auth required pam_stack.so service=system-auth auth required pam_nologin.so account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_stack.so service=system-auth session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should be the last session rule session required pam_selinux.so multiple open |
如此一來, root 將可以直接進(jìn)入 Linux 主機(jī)了!不過,既然我們可以透過 su 或 sudo 來切換身份, 那麼幹嘛還需要開放 root 用 telnet 登入主機(jī)呢?真是沒必要~所以,
還是不建議如此做的!
加上防火牆 iptables: 針對 telnet 加設(shè)防火牆 iptables 是一個好主意!如果您已經(jīng)參考了前面章節(jié)提到的『
簡 易防火牆架設(shè) 』一文,並且使用裡面的 scripts 的話,那麼不用擔(dān)心 telnet 啦!基本上,他原本就僅對內(nèi)部開放 telnet ,外部是無法連上您的 telnet 的!但是,若是您自己設(shè)定了自己的防火牆機(jī)制之後,那麼想要針對 192.168.0.0/24 這個網(wǎng)域,及 61.xxx.xxx.xxx 這個 IP 進(jìn)行 telnet 的開放呢?可以增加這幾行在您的 iptables 規(guī)則之內(nèi)(請注意:防火牆的規(guī)則順序是很重要的!所以再回頭看看
簡 易防火牆架設(shè) 一文是有必要的!)
iptables -A INPUT -p tcp -i $INIF -s 192.168.0.0/24 --dport 23 -j ACCEPT iptables -A INPUT -p tcp -i $EXTIF -s 61.xxx.xxx.xxx --dport 23 -j ACCEPT iptables -A INPUT -p tcp -i $EXTIF --dport 23 -j DROP |
上面的規(guī)則中,$EXTIF 指的是對外的連線介面,$INIF 則是對內(nèi)的介面。 第一、二行是針對來源的 IP 來開放 port 23 亦即是 telnet 的協(xié)定啦! 而最後一行則是將其他的所有來源的,想要連上 telnet 的連線封包都丟掉的意思!怎麼樣!很簡單吧!
加上防火牆 /etc/hosts.allow(deny) 機(jī)制: 防火牆的機(jī)制是越多越好!永遠(yuǎn)也不嫌多的啦!這裡也可以使用 TCP_Wrappers 的機(jī)制呢!剛剛是開放了 192.168.0.0/24 這個網(wǎng)段,但是如果您只想要其中的 192.168.0.1 ~ 192.168.0.5 進(jìn)入呢?而其他的 IP 只要一經(jīng)連線,就會被記錄該 IP ,以提供 root 查詢呢?可以這樣做:
[root@linux ~]# vi /etc/hosts.allow in.telnetd: 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4 in.telnetd: 192.168.0.5 [root@linux ~]# vi /etc/hosts.deny in.telnetd : ALL : spawn (/bin/echo Security notice from `/bin/hostname`; /bin/echo; /usr/sbin/safe_finger @%h ) | /bin/mail -s "%d -%h security" root@localhost & : twist ( /bin/echo -e "\n\nWARNING connectin not allowed. \n\n\n" ) |
建議事項(xiàng): 事實(shí)上, telnet 最大的不安全在於資料是以明碼傳輸,所以在 Internet 這個大家都能夠連上的地方來傳輸資料時,實(shí)在很不安全!所以:
- 非必要時,不要啟動 telnet ,如果真的需要啟動 telnet ,那麼也請?jiān)趩觼K且使用完畢之後,立即將他關(guān)掉!
- 如果確定真的要啟動 telnet 時,請確定好限制的連線範(fàn)圍,使用 iptables 來設(shè)定連線的限制區(qū)域;
- 加上 TCP_Wrappers 的輔助,加強(qiáng)防火牆的功能!
- 隨時注意登錄檔案裡面關(guān)於 login 的事項(xiàng)!並且不要讓 root 能以 telnet 登入 Linux 主機(jī)!

SSH 伺服器 既然 telnet 的資料在 Internet 上不是很安全,那麼我又需要以遠(yuǎn)端連線服務(wù)來操控我的 Linux 主機(jī),那麼應(yīng)該怎麼辦呀?最好的方法當(dāng)然就是以較為安全的連線機(jī)制來解決連線的問題囉! 那麼該如何解決這樣的問題呢?這也不難啦,使用 SSH 即可。那麼 SSH 是什麼呢?他有什麼特異功能?
簡單的來說,
SSH 是 Secure SHell protocol 的簡寫,他可以經(jīng)由將連線的封包加密的技術(shù), 來進(jìn)行資料的傳遞,因此,資料當(dāng)然就比較安全囉!這個 SSH 可以用來取代 Internet 上面較不安全的 finger, R Shell (rcp, rlogin, rsh 等指令), talk 及 telnet 等連線模式。底下我們將先簡介一下 SSH 的連線模式,來說明為什麼 SSH 會比較安全呢!
特別注意:這個 SSH 協(xié)定,在預(yù)設(shè)的狀態(tài)中,本身就提供兩個伺服器功能:
- 一個就是類似 telnet 的遠(yuǎn)端連線使用 shell 的伺服器,亦即是俗稱的 ssh ;
- 另一個就是類似 FTP 服務(wù)的 sftp-server !提供更安全的 FTP 服務(wù)。
連線加密技術(shù)簡介: 什麼是『資料加密』呢?簡單的說,就是將人們看的懂得電子資料,經(jīng)過一些運(yùn)算, 讓這些資料變成沒有意義的(至少對人類來說)咚咚,然後這個咚咚可以在網(wǎng)路上面?zhèn)鬏敚?而當(dāng)使用者想要查閱這個資料時,再透過反向運(yùn)算,將這些咚咚反推出原始的電子資料。 由於這些資料已經(jīng)被重新處理過,所以,即使資料在 Internet 上被 cracker 監(jiān)聽而竊取,他們也不容易就推算得出來原始資料內(nèi)容的。
網(wǎng)路封包的加密技術(shù)通常是藉由所謂的『
一對公鑰與私鑰』 亦即『
Public and Private 組合成的 key pair』 來進(jìn)行加密與解密的動作!如下圖所示。主機(jī)端所要傳給 client 端的資料,會先經(jīng)由公鑰加密後才到網(wǎng)路上傳輸。 而到達(dá) client 端之後,再經(jīng)由私鑰將加密的資料解開來~由於在 Internet 上面跑的資料是加密過後的, 所以你的資料內(nèi)容當(dāng)然就比較安全啦!
圖一、公鑰與私鑰在進(jìn)行資料傳輸時的角色示意圖 Tips: 資料加密的技術(shù)真的相當(dāng)?shù)亩?,也各有其?yōu)缺點(diǎn),有的運(yùn)算速度快, 但是不夠安全;有的夠安全,但是加密/解密的速度較慢~ 目前在 SSH 使用上,主要是利用 RSA/DSA/Diffie-Hellman 等機(jī)制喔! | |
那麼這些公鑰與私鑰是如何產(chǎn)生的呢?底下我們來談一談目前 SSH 的兩種版本的連線模式囉!
SSH protocol version 1: 每一部 SSH 伺服器主機(jī)都可以使用 RSA 加密方式來產(chǎn)生一個 1024-bit 的 RSA Key , 這個 RSA 的加密方式,主要就是用來產(chǎn)生公鑰與私鑰的演算方法!這個 version 1 的整個連線的加密步驟可以簡單的這麼看:
- 當(dāng)每次 SSH daemon (sshd) 啟動時,就會產(chǎn)生一支 768-bit 的公鑰(或稱為 server key)存放在 Server 中;
- 若有 client 端的 ssh 連線需求傳送來時,那麼 Server 就會將這一支公鑰傳給 client ,此時 client 也會比對一下這支公鑰的正確性。比對的方法為利用 /etc/ssh/ssh_known_hosts 或 ~/.ssh/known_hosts 檔案內(nèi)容。
- 在 Client 接受這個 768-bit 的 server key 之後,Client 自己也會隨機(jī)產(chǎn)生一支 256-bit 的私鑰(host key),並且以加密的方式將 server key 與 host key 整合成一對完整的 Key pair,並且將這對 Key pair 也傳送給 server ;
- 之後,Server 與 Client 在這次的連線當(dāng)中,就以這一對 1024-bit 的 Key pair 來進(jìn)行資料的傳遞!
也就是說,Public Key 是放在 Server 上的,而 Client 端的軟體必須要能接受 Public Key 以及計(jì)算出 Private Key 以組合成為一把獨(dú)一無二的 key pair ,因?yàn)?Client 端每次的 256-bit 的 Key 是隨機(jī)取的,所以您這次的連線與下次的連線的 Key 可能就會不一樣啦!此外在 Client 端的使用者家目錄下的 ~/.ssh/known_hosts 會記錄曾經(jīng)連線過的主機(jī)的 public key ,用以確認(rèn)每次來自該主機(jī)的連線是正確的。 這個 ~/.ssh/known_hosts 檔案的意義後續(xù)還會介紹的。
SSH protocol version 2: 在 SSH version1 的連線過程當(dāng)中,當(dāng) server 端接受 client 端的 private key 後,就不再針對該次連線的 key pair 進(jìn)行檢驗(yàn)。此時若有惡意的 cracker 針對該連線給予惡意的程式碼時,由於主機(jī)端不會檢驗(yàn)連線的正確性, 因此可能會接受該程式碼,進(jìn)一步造成系統(tǒng)被黑掉的問題。
為了改正這個缺失,SSH version 2 多加了一個確認(rèn)連線正確性的 Diffie-Hellman 機(jī)制, 在每次資料的傳輸當(dāng)中 server 端都會以該機(jī)制檢查資料的來源是否正確, 所以可以避免連線過程當(dāng)中被插入惡意程式碼的問題! 也就是說, ssh version 2 是比較安全的喔!
由於 SSH version 1 本身存在著的一些問題,因此,近來我們都希望大家使用 ssh version 2 的連線模式, 會比較安全一點(diǎn)。而連線版本的設(shè)定則需要在 ssh 主機(jī)端與客戶端均設(shè)定好才行喔!

啟動 SSH 服務(wù): 事實(shí)上,在我們使用的 Linux 系統(tǒng)當(dāng)中,預(yù)設(shè)就已經(jīng)含有 SSH 的所有需要的套件了! 這包含了可以產(chǎn)生密碼等協(xié)定的
OpenSSL 套件與
OpenSSH 套件,所以呢,要啟動 SSH 真的是太簡單了!就直接給他啟動就是了!此外,在目前的 Linux Distributions 當(dāng)中,
都是預(yù)設(shè)啟動 SSH 的, 所以一點(diǎn)都不麻煩,因?yàn)椴挥萌ピO(shè)定,他就已經(jīng)啟動了!哇!真是爽快~無論如何, 我們還是得說一說這個啟動的方式吧!直接啟動就是以 SSH daemon ,簡稱為 sshd 來啟動的,所以,手動可以這樣啟動:
[root@linux ~]# /etc/init.d/sshd restart [root@linux ~]# netstat -tlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 *:ssh *:* LISTEN 24266/sshd |
啟動後,利用
netstat 查閱一下 sshd 這個程序是否正確的在 LISTEN 即可!當(dāng)然,這個時候您的 SSH 伺服器設(shè)定值均是使用系統(tǒng)預(yù)設(shè)值, 能不能夠僅用較安全的 version 2 ,則需要進(jìn)一步的設(shè)定呢。 接下來,如果您想要在開機(jī)就啟動 SSH 的話(預(yù)設(shè)也是啟動的!),可以利用
chkconfig 來設(shè)定開機(jī)啟動即可。
雖然新的 Linux distributions 都預(yù)設(shè)會有 SSH 存在的,但是較舊的版本就僅有 telnet 而已。 例如 Red Hat 6.x 之前的版本。那麼如果您想要在舊的 distributions 當(dāng)中安裝 SSH 該如何是好? 嘿嘿!可以參考一下鳥哥之前寫過的一篇咚咚,有詳細(xì)的說明 tarball 的安裝流程哩!
需要注意的是, SSH 不但提供了 shell 給我們使用,亦即是 ssh protocol 的主要目的,同時亦提供了一個較為安全的 FTP server ,亦即是 ssh-ftp server 給我們當(dāng)成是 FTP 來使用!所以,
這個 sshd 可以同時提供 shell 與 ftp 喔!而且都是架構(gòu)在 port 22 上面的呢!所以,底下我們就來提一提,那麼怎麼樣由 Client 端連接上 Server 端呢?同時,如何以 FTP 的服務(wù)來連接上 Server 並且使用 FTP 的功能呢?

ssh 用戶端連線: 由於 Linux 與 Windows 這兩個用戶端 Client 連線軟體/指令並不一樣,所以我們分別來介紹可以使用的指令:
Linux Client: ssh SSH 在 client 端使用的是 ssh 這個指令,這個指令可以指定連線的版本 (version1, version2), 還可以指定非正規(guī)的 ssh port (正規(guī) ssh port 為 22)。不過,一般的用法可以使用底下的方式:
1. 直接登入到對方主機(jī)的方法: [root@linux ~]# ssh account@hostname # 連接到我們自己本機(jī)上面的 ssh 服務(wù)!更多訊息,請 man ssh 喔! [root@linux ~]# ssh dmtsai@localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is f8:ae:67:0e:f0:e0:3e:bb:d9:88:1e:c9:2e:62:22:72. Are you sure you want to continue connecting (yes/no)? yes # 上面很重要喔!務(wù)必填入完整的 "yes" 而不是 Y 或 y 而已。 Warning: Permanently added 'localhost' (RSA) to the list of known hosts. dmtsai@localhost's password: <== 在這裡填入密碼,同樣的,螢?zāi)徊粫杏嵪⒌模?/span> Last login: Fri Jul 1 14:23:27 2005 from localhost.localdomain [dmtsai@linux ~]$ <== 瞧!已經(jīng)登入囉~ [dmtsai@linux ~]$ exit <== 輸入 exit 就能夠離開對方主機(jī)囉! 2. 不登入對方主機(jī),直接在對方主機(jī)執(zhí)行指令的方法: [root@linux ~]# ssh dmtsai@localhost date dmtsai@localhost's password: Tue Nov 22 11:57:27 CST 2005 [root@linux ~]# # 看!身份還是 root 喔!只是以 dmtsai 的身份在遠(yuǎn)端主機(jī)上執(zhí)行了一個指令而已! |
這裡請?zhí)貏e留意的是,如果直接以『
ssh hostname 』這個指令來連接進(jìn)入 hostname 這個主機(jī)時,則
進(jìn)入 hostname 這個主機(jī)的『帳號名稱』將會是目前您所在的這個環(huán)境當(dāng)中的使用者帳號! 以上面為例,因?yàn)槲沂且?root 的身份在執(zhí)行,所以如果我執(zhí)行了『 ssh host.domain.name 』時, 那麼對方 host.domain.name 這部主機(jī),就會以 root 的身份來讓我進(jìn)行密碼確認(rèn)的登入動作!
因此,為了避免這樣的麻煩,通常鳥哥都是以簡單的 e-mail 的寫法來登入遠(yuǎn)方的主機(jī), 例如『
ssh user@hostname 』即表示, 鳥哥是以 user 這個帳號去登入 hostname 這部主機(jī)的意思。當(dāng)然,也可以使用 -l username 這樣的形式來書寫!登入對方主機(jī)之後,其他的所有執(zhí)行行為都跟在 Linux 主機(jī)內(nèi)沒有兩樣~所以,真的是很簡單吧! ^_^ 這樣就可以達(dá)到遠(yuǎn)端控管主機(jī)的目的了!
此外,
在預(yù)設(shè)的情況下, SSH 是『允許您以 root 的身份登入』喔 !呵呵!更是爽快啦!要特別留意的是,當(dāng)您要連接到對方的主機(jī)時,如果是首次連接,那麼 Server 會問您,您的連線的 Key 尚未被建立,要不要接受 Server 傳來的 Key ,並建立起連線呢?呵呵!這個時候請『
務(wù)必要輸入 yes 而不是 y 或 Y』,這樣程式才會接受喔!
關(guān)於 Server Keys 的紀(jì)錄資料: ~/.ssh/known_hosts 如果您剛剛有研究過 SSH 的連線流程的話,會發(fā)現(xiàn)到當(dāng) client 端接受來自 server 端的 public key 之後,會主動的比對這支 Key 的正確性。而比對的檔案是 ~/.ssh/known_hosts 。 若是接受到的這支 public key 並沒有被紀(jì)錄在這檔案內(nèi),那麼上面表格的訊息, 就是要您回答 yes/no 的那個訊息才會出現(xiàn)~而您回答 yes 之後,該 public key 資訊就會被記錄起來,以留待下次登入同一部主機(jī)時的檢查之用啊!
如果 Server Key 與 ~/.ssh/known_hosts 比對成功, 那麼您就會直接進(jìn)入等待密碼輸入的畫面, 那就不必每次都得要輸入 (yes/no) 囉~
不過,您或許也會發(fā)現(xiàn)一件事情啊,我們知道 SSH server 雖然使用 version 2 已經(jīng)不會重複製造 server key (public key) 了,但是如果該主機(jī)重新安裝過新的 linux distributions 時, 那把 server key 就會被改變?。《?client 又會去比對這個 public key 與 ~/.ssh/known_hosts , 此時 Client 就會發(fā)現(xiàn)兩者不同了,於是乎產(chǎn)生如下的錯誤訊息了:
[root@linux ~]# ssh dmtsai@localhost @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is f8:ae:67:0e:f0:a0:3e:aa:d9:77:19:c9:2e:62:22:72. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:1 RSA host key for localhost has changed and you have requested strict checking. Host key verification failed. |
這個錯誤訊息在告訴您,上次所登錄的遠(yuǎn)端 SSH 主機(jī)的 Keys 已經(jīng)被改過了(最可能的原因就是 Server 端重新開機(jī)/重新安裝/更新套件等等啦!), 所以無法繼續(xù)登入~呵呵!這個時候怎麼辦?很簡單啊!
進(jìn)入您的家目錄的 ~/.ssh 裡面,編輯一下 known_hosts ,將欲連接的主機(jī)名稱的 Key 給他消除,就可以重新連線啦!
[root@linux ~]# vi ~/.ssh/known_hosts localhost ssh-rsa AAAAB3NzaC1yc2Euowireffodjoiwjefmoeiwhoqhwupoi t[egmlomowimvoiweo6VpTHTw2/tENp4U7Wn8J6nxYWP36YziFgxtWu4MPSKaRmr E4eUpR1G/zV3TkChRZY5hGUybAreupTVdxCZvJlYvNiejfijoejwiojfijeoiwx5 eRkzvSj7a19vELZ5f8XhzH62E= |
上面表格的內(nèi)容其實(shí)是同一行的~那一行代表『 localhost 這部主機(jī),利用的是 ssh-rsa 連線機(jī)制, 而後續(xù)的資料則是那把 Server Key 的內(nèi)容。』如果您確定這次的比對無法成功是正常的, 那麼您可以將這一行給他刪除,這樣下次要再登入時,就又會再次的出現(xiàn)問 (yes/no) 的畫面??!
Linux Client: sftp 那麼如何使用 SSH FTP 的功能呢?也是很容易啦!就是使用 sftp 這支程式即可!而登入的方式與 ssh 相同,都是使用 sftp -l username hostname 或者直接以 sftp user@hosname 來書寫!執(zhí)行之後會有底下的模樣:
[root@linux ~]# sftp dmtsai@localhost Connecting to localhost... dmtsai@localhost's password: <== 這裡請輸入密碼??! sftp> <== 這裡就是在等待您輸入 ftp 相關(guān)指令的地方了! |
進(jìn)入到 sftp 之後,那就跟在一般 FTP 模式下的操作方法沒有兩樣了!底下我們就來談一談, sftp 這個介面下的使用指令吧!
針對遠(yuǎn)方主機(jī)(Server)之行為 |
變換目錄到 /etc/test 或其他目錄 | cd /etc/test cd PATH |
列出目前所在目錄下的檔名 | ls dir |
建立目錄 | mkdir directory |
刪除目錄 | rmdir directory |
顯示目前所在的目錄 | pwd |
更改檔案或目錄群組 | chgrp groupname PATH |
更改檔案或目錄擁有者 | chown username PATH |
更改檔案或目錄的權(quán)限 | chmod 644 PATH 其中,644 與權(quán)限有關(guān)!回去看基礎(chǔ)篇! |
建立連結(jié)檔 | ln oldname newname |
刪除檔案或目錄 | rm PATH |
更改檔案或目錄名稱 | rename oldname newname |
離開遠(yuǎn)端主機(jī) | exit (or) bye (or) quit |
針對本機(jī)(Client)之行為(都加上 l, L 的小寫 ) |
變換目錄到本機(jī)的 PATH 當(dāng)中 | lcd PATH |
列出目前本機(jī)所在目錄下的檔名 | lls |
在本機(jī)建立目錄 | lmkdir |
顯示目前所在的本機(jī)目錄 | lpwd |
針對資料上傳/下載的行為 |
將檔案由本機(jī)上傳到遠(yuǎn)端主機(jī) | put [本機(jī)目錄或檔案] [遠(yuǎn)端] put [本機(jī)目錄或檔案] 如果是這種格式,則檔案會放置到目前遠(yuǎn)端主機(jī)的目錄下! |
將檔案由遠(yuǎn)端主機(jī)下載回來 | get [遠(yuǎn)端主機(jī)目錄或檔案] [本機(jī)] get [遠(yuǎn)端主機(jī)目錄或檔案] 若是這種格式,則檔案會放置在目前本機(jī)所在的目錄當(dāng)中!可以使用萬用字元,例如: get * get *.rpm 亦是可以的格式! |
就整體而言, sftp 在 Linux 底下,如果不考慮圖形介面,那麼他已經(jīng)可以取代 FTP 了呢!因?yàn)樗械墓δ芏家呀?jīng)涵蓋啦!因此,在不考慮到圖形介面的 FTP 軟體時,可以直接關(guān)掉 FTP 的服務(wù),而改以 sftp-server 來提供 FTP 的服務(wù)吧! ^_^
Linux Client: scp 如果我要在兩個主機(jī)之間複製檔案的話,除了 sftp 之外,還有沒有更簡單的方式? 有的,那就是利用 scp 這個指令啦!這個指令的用法與 cp 很相像,不過, 在遠(yuǎn)端主機(jī)的目錄寫法,比較需要注意就是了。舉例如下:
1. 將資料由本機(jī)上傳到遠(yuǎn)端主機(jī)上去 [root@linux ~]# scp /etc/crontab dmtsai@localhost:/home/dmtsai/ dmtsai@localhost's password: <== 這裡請輸入密碼?。?/span> crontab 100% 620 0.6KB/s 00:00 # 這個例子在說明,我將本機(jī)目錄的 /etc/crontab 這個檔案傳送給 dmtsai # 這個使用者,而這個使用者是在 "localhost" 那部主機(jī)上面喔! # 仔細(xì)看一下,會有一個傳輸資料的訊息跑出來喔! 2. 將資料由遠(yuǎn)端主機(jī)下載到本機(jī)上! [root@linux ~]# scp dmtsai@localhost:~/.bashrc . # 這個例子則是在說明,我要將 localhost 那部機(jī)器上的 dmtsai 這個人, # 他家目錄下的 .bashrc 複製到我的機(jī)器上! |
也就是說,遠(yuǎn)端主機(jī)上的檔案或目錄要複製時,是以『
hostname:PATH 』 方式來書寫的~不要寫錯了呦!而如果想要複製目錄的話,那麼可以加上 -r 的參數(shù)!
Windows Client: putty 在 Linux 底下想要連接 SSH 伺服器,可以直接利用
ssh 這個指令 ,那麼如果在 Windows 作業(yè)系統(tǒng)底下,又該如何連接到 SSH 伺服器呢?可以直接使用 putty 或 pietty 這種類型的連線軟體呢,他也是免費(fèi)的自由軟體喔!取得的方式可以參考底下的網(wǎng)站:
在 putty 的官方網(wǎng)站上有很多的 client 軟體可以使用的,包括 putty/pscp/psftp 等等。 他們分別對應(yīng)了 ssh/scp/sftp 這三個指令就是了。而上述的三個 putty/pscp/psftp 主要是在 Windows 上面連接到 Unix like 機(jī)器的 SSH 伺服器的 Client 軟體呢。請自行下載該軟體喔。
事實(shí)上,鳥哥比較喜歡林弘德先生的 pietty,因?yàn)檫@個軟體不但是完整支援 putty ,而且提供的文字編碼較豐富, 實(shí)在很好用。在你下載了 pietty 後直接雙擊他, 會有類似底下的圖示出現(xiàn)。
圖二、pietty 的執(zhí)行圖示之一 在上圖 1 的地方請?zhí)顚懴嚓P(guān)的主機(jī)名稱或者是 IP ,2 當(dāng)然務(wù)必選擇 SSH 那一項(xiàng), 至於 3 的地方,鳥哥比較喜歡選單出現(xiàn)的樣式,所以我是選擇選單啦!若沒有問題,按下『連線』後, 就會出現(xiàn)如下樣式:
圖三、pietty 的執(zhí)行圖示之一 很像在主機(jī)前面工作吧!而且上頭還有選單可以隨時調(diào)整類似字形、字體、字元編碼等等。 尤其是字元編碼。有時候你會發(fā)現(xiàn)開啟檔案時,竟然畫面當(dāng)中會有亂碼而不是正常的中文顯示, 那就是編碼的問題。要解決這個問題時,你必須要牢記:
- 文字檔案本身在存檔時所挑選的語系;
- Linux 主機(jī)本身所使用的語系 (可用 LANG 變數(shù)調(diào)整);
- pietty 所使用的語系。
這三個咚咚的語系要完全相同時才會正確的顯示出中文!千要要牢記??! 那如何調(diào)整 pietty 的中文編碼呢?
圖四、pietty 的執(zhí)行圖示之一 在『選項(xiàng)』的『字元編碼』裡面可以挑選 big5 或者是 utf8 的中文編碼, 讓他符合你的 Linux 與檔案所儲存的資料格式,那就 OK 的啦! ^_^! 如果想要作更細(xì)部的設(shè)定時,可以選擇圖四上頭最底下的那個『詳細(xì)設(shè)定』項(xiàng)目, 就會出現(xiàn)如下圖示。其中更為重要的是『鍵盤右側(cè)的數(shù)字鍵想要生效』時, 可以按照下圖的指示來啟動數(shù)字鍵的功能:
圖五、pietty 的執(zhí)行圖示之一 如上圖所示,在你輸入『Apply』之後,就可以自動的生效了!現(xiàn)在你可以按鍵盤右邊的按鈕了, 真方便。再來你可以調(diào)整 pietty 捲軸的記憶行數(shù),這樣當(dāng)資料太多時,你依舊可以調(diào)整捲軸來查閱之前的資料。 設(shè)定的方法如下:
圖六、pietty 的執(zhí)行圖示之一 調(diào)整完了螢?zāi)坏拇笮≈?,再來這是最重要的:『您要以哪一個版本的 SSH 演算法登入?!』前面說過,我們預(yù)設(shè)是以 version2 來登入的,所以這裡我們可以調(diào)整為 2 那個項(xiàng)目!這樣每次登入都會以 version 2 的模式登入主機(jī)了!
圖七、pietty 的執(zhí)行圖示之一 整個 pietty 大致上的流程就是這樣!如此一來,您就可以在 Windows 上面以 SSH 的協(xié)定,登入遠(yuǎn)端的 Linux 主機(jī)嚕!粉方便吧! ^_^ ! 那麼如果想要中文支援的話,目前 pietty 已經(jīng)支援中文啦!您可以輸入中文喔!不過需要修改一下字元集, 選擇圖四的『選項(xiàng)』內(nèi)的『字型』,會出現(xiàn)如下圖示:
圖八、pietty 的執(zhí)行圖示之一 將(1)字型設(shè)定為細(xì)明體 (2)字集設(shè)定為『Big5』,如此一來,您的 pietty 就支援中文的輸入囉! ^_^
那麼上面我們作的這些設(shè)定值都記錄在哪裡???呵呵!都記錄在 Windows 的登錄檔當(dāng)中??! 您可以在 Windows 的系統(tǒng)當(dāng)中,在『開始』-->『執(zhí)行』後,出現(xiàn)的框框內(nèi)輸入『regedit』, 之後會出現(xiàn)一個大視窗。請?jiān)谧筮叺漠嬅娈?dāng)中選擇『
HKEY_CURRENT_USER --> Software --> SimonTatham --> PuTTY --> Sessions』, 就可以看到您的設(shè)定值囉! ^_^! 這樣,也就可以儲存您的設(shè)定值囉~
Windows Client: psftp 在 putty 的官方網(wǎng)站上也提供 psftp 這支程式。這一支程式的重點(diǎn)則是在於以 sftp 連線上 Server 。連線的方式可以直接點(diǎn)選 psftp 這個檔案,讓他直接啟動,則會出現(xiàn)下面的圖樣:
psftp: no hostname specified; use "open host.name" to connect psftp> |
這個時候可以填入您要連接上去的主機(jī)名稱,例如我的區(qū)域內(nèi)網(wǎng)路 linux.dmtsai.tw 這個主機(jī)
psftp: no hostname specified; use "open host.name" to connect psftp> open test.linux.org login as: dmtsai Using username "dmtsai". dmtsai@linux.dmtsai.tw's password: Remote working directory is /home/dmtsai psftp> <== 這裡就在等待您輸入 FTP 的指令了! |
呵呵!這樣就登入主機(jī)啦!很簡單吧!然後其他的使用方式跟前面提到的 sftp 一樣哩!加油的使用吧!
Windows Client: Fliezilla 那麼 SSH 所提供的 sftp 功能只能利用純文字介面的 psftp 來連線嗎?有沒有圖形介面的軟體呢?呵呵!當(dāng)然有! 那就是非常有用的 Filezilla 囉!Filezilla 是圖形介面的一個 FTP 用戶端軟體,使用上非常的方便, 至於詳細(xì)的安裝與使用流程請參考
vsftpd 章節(jié)的說明喔!

詳細(xì)設(shè)定 sshd 伺服器 基本上,所有的 ssh 相關(guān)設(shè)定都放在
/etc/ssh/sshd_config 裡面!不過,每個 Linux distribution 的預(yù)設(shè)設(shè)定都不太相同, 所以我們有必要來瞭解一下整個設(shè)定值的意義為何才好!
[root@linux ~]# vi /etc/ssh/sshd_config # 1. 關(guān)於 SSH Server 的整體設(shè)定,包含使用的 port 啦,以及使用的密碼演算方式 # 先留意一下,在預(yù)設(shè)的檔案內(nèi),只要是被註解的設(shè)定值(#),即為『預(yù)設(shè)值!』 Port 22 # SSH 預(yù)設(shè)使用 22 這個port,也可以使用多個port,即重複使用 port 這個設(shè)定項(xiàng)目! # 例如想要開放 sshd 在 22 與 443 ,則多加一行內(nèi)容為: # Port 443 # 這樣就好了!不過,不建議修改 port number 啦! Protocol 1,2 # 選擇的 SSH 協(xié)定版本,可以是 1 也可以是 2 , # 如果要同時支援兩者,就必須要使用 2,1 這個分隔了(Protocol 1,2)! # 目前我們會建議您,直接使用 Protocol 2 即可! #ListenAddress 0.0.0.0 # 監(jiān)聽的主機(jī)介面卡!舉個例子來說,如果您有兩個 IP, # 分別是 192.168.0.100 及 192.168.2.20 ,那麼只想要 # 開放 192.168.0.100 時,就可以寫如同下面的樣式: ListenAddress 192.168.0.100 # 只監(jiān)聽來自 192.168.0.100 這個 IP 的SSH連線。 # 如果不使用設(shè)定的話,則預(yù)設(shè)所有介面均接受 SSH #PidFile /var/run/sshd.pid # 可以放置 SSHD 這個 PID 的檔案!左列為預(yù)設(shè)值 #LoginGraceTime 2m # 當(dāng)使用者連上 SSH server 之後,會出現(xiàn)輸入密碼的畫面,在該畫面中, # 在多久時間內(nèi)沒有成功連上 SSH server ,就斷線!若無單位則預(yù)設(shè)時間為秒! #Compression yes # 是否可以使用壓縮指令?當(dāng)然可以囉 # 2. 說明主機(jī)的 Private Key 放置的檔案,預(yù)設(shè)使用下面的檔案即可! #HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私鑰 #HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰 #HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰 # 還記得我們在主機(jī)的 SSH 連線流程裡面談到的,這裡就是 Host Key ~ # 2.1 關(guān)於 version 1 的一些設(shè)定! #KeyRegenerationInterval 1h # 由前面連線的說明可以知道, version 1 會使用 server 的 Public Key , # 那麼如果這個 Public Key 被偷的話,豈不完蛋?所以需要每隔一段時間 # 來重新建立一次!這裡的時間為秒!不過我們通常都僅使用 version 2 , # 所以這個設(shè)定可以被忽略喔! #ServerKeyBits 768 # 沒錯!這個就是 Server key 的長度!用預(yù)設(shè)值即可。 # 3. 關(guān)於登錄檔的訊息資料放置與 daemon 的名稱! SyslogFacility AUTHPRIV # 當(dāng)有人使用 SSH 登入系統(tǒng)的時候,SSH會記錄資訊,這個資訊要記錄在什麼 daemon name # 底下?預(yù)設(shè)是以 AUTH 來設(shè)定的,即是 /var/log/secure 裡面!什麼?忘記了! # 回到 Linux 基礎(chǔ) 去翻一下。其他可用的 daemon name 為:DAEMON,USER,AUTH, # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5, #LogLevel INFO # 登錄記錄的等級!嘿嘿!任何訊息!同樣的,忘記了就回去參考! # 4. 安全設(shè)定項(xiàng)目!極重要! # 4.1 登入設(shè)定部分 PermitRootLogin no # 是否允許 root 登入!預(yù)設(shè)是允許的,但是建議設(shè)定成 no! #UserLogin no # 在 SSH 底下本來就不接受 login 這個程式的登入! #StrictModes yes # 當(dāng)使用者的 host key 改變之後,Server 就不接受連線,可以抵擋部分的木馬程式! #RSAAuthentication yes # 是否使用純的 RSA 認(rèn)證?。績H針對 version 1 ! #PubkeyAuthentication yes # 是否允許 Public Key ?當(dāng)然允許啦!僅針對 version 2 #AuthorizedKeysFile .ssh/authorized_keys # 上面這個在設(shè)定若要使用不需要密碼登入的帳號時,那麼那個帳號的存放檔案所在檔名! # 這個設(shè)定值很重要喔!檔名給他記一下! # 4.2 認(rèn)證部分 #RhostsAuthentication no # 本機(jī)系統(tǒng)不使用 .rhosts,因?yàn)閮H使用 .rhosts太不安全了,所以這裡一定要設(shè)定為 no #IgnoreRhosts yes # 是否取消使用 ~/.ssh/.rhosts 來做為認(rèn)證!當(dāng)然是! #RhostsRSAAuthentication no # # 這個選項(xiàng)是專門給 version 1 用的,使用 rhosts 檔案在 /etc/hosts.equiv # 配合 RSA 演算方式來進(jìn)行認(rèn)證!不要使用啊! #HostbasedAuthentication no # 這個項(xiàng)目與上面的項(xiàng)目類似,不過是給 version 2 使用的! #IgnoreUserKnownHosts no # 是否忽略家目錄內(nèi)的 ~/.ssh/known_hosts 這個檔案所記錄的主機(jī)內(nèi)容? # 當(dāng)然不要忽略,所以這裡就是 no 啦! PasswordAuthentication yes # 密碼驗(yàn)證當(dāng)然是需要的!所以這裡寫 yes 囉! #PermitEmptyPasswords no # 若上面那一項(xiàng)如果設(shè)定為 yes 的話,這一項(xiàng)就最好設(shè)定為 no , # 這個項(xiàng)目在是否允許以空的密碼登入!當(dāng)然不許! ChallengeResponseAuthentication no # 允許任何的密碼認(rèn)證!所以,任何 login.conf 規(guī)定的認(rèn)證方式,均可適用! # 但目前我們比較喜歡使用 PAM 模組幫忙管理認(rèn)證,因此這個選項(xiàng)可以設(shè)定為 no 喔! UsePAM yes # 利用 PAM 管理使用者認(rèn)證有很多好處,可以記錄與管理。 # 所以這裡我們建議您使用 UsePAM 且 ChallengeResponseAuthentication 設(shè)定為 no # 4.3 與 Kerberos 有關(guān)的參數(shù)設(shè)定!因?yàn)槲覀儧]有 Kerberos 主機(jī),所以底下不用設(shè)定! #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosTgtPassing no # 4.4 底下是有關(guān)在 X-Window 底下使用的相關(guān)設(shè)定! X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes # 4.5 登入後的項(xiàng)目: PrintMotd no # 登入後是否顯示出一些資訊呢?例如上次登入的時間、地點(diǎn)等等,預(yù)設(shè)是 yes # 亦即是列印出 /etc/motd 這個檔案的內(nèi)容。但是,如果為了安全,可以考慮改為 no ! PrintLastLog yes # 顯示上次登入的資訊!可以??!預(yù)設(shè)也是 yes ! KeepAlive yes # 一般而言,如果設(shè)定這項(xiàng)目的話,那麼 SSH Server 會傳送KeepAlive 的訊息給 # Client端,以確保兩者的連線正常!在這個情況下,任何一端死掉後,SSH可以立刻知道! # 而不會有僵屍程序的發(fā)生! UsePrivilegeSeparation yes # 使用者的權(quán)限設(shè)定項(xiàng)目!就設(shè)定為 yes 吧! MaxStartups 10 # 同時允許幾個尚未登入的連線畫面?當(dāng)我們連上 SSH ,但是尚未輸入密碼時, # 這個時候就是我們所謂的連線畫面啦!在這個連線畫面中,為了保護(hù)主機(jī), # 所以需要設(shè)定最大值,預(yù)設(shè)最多十個連線畫面,而已經(jīng)建立連線的不計(jì)算在這十個當(dāng)中 # 4.6 關(guān)於使用者抵擋的設(shè)定項(xiàng)目: DenyUsers * # 設(shè)定受抵擋的使用者名稱,如果是全部的使用者,那就是全部擋吧! # 若是部分使用者,可以將該帳號填入!例如下列! DenyUsers test DenyGroups test # 與 DenyUsers 相同!僅抵擋幾個群組而已! # 5. 關(guān)於 SFTP 服務(wù)的設(shè)定項(xiàng)目! Subsystem sftp /usr/lib/ssh/sftp-server |
基本上,CentOS 預(yù)設(shè)的 sshd 服務(wù)已經(jīng)算是挺安全的了,不過還不夠!
建議你 (1)將 root 的登入權(quán)限取消; (2)將 ssh 版本設(shè)定為 2 。 其他的設(shè)定值就請您依照自己的喜好來設(shè)定了。通常不建議進(jìn)行隨便修改啦! 另外,如果您修改過上面這個檔案(/etc/ssh/sshd_config),那麼就必需要重新啟動一次 sshd 這個 daemon 才行!亦即是:

製作不用密碼可立即登入的 ssh 用戶: 咦!既然 SSH 可以使用 Key 來比對資料,並且提供使用者資料的加密功能, 那麼可不可能利用這個 Key 就提供使用者自己進(jìn)入主機(jī),而不需要輸入密碼呢? 呵呵!好主意!我們可以將 Client 產(chǎn)生的 Key 給他拷貝到 Server 當(dāng)中,所以, 以後 Client 登入 Server 時,由於兩者在 SSH 要連線的訊號傳遞中,就已經(jīng)比對過 Key 了, 因此,可以立即進(jìn)入資料傳輸介面中,而不需要再輸入密碼呢!在實(shí)作上的步驟可以是:
- 首先,先在 Client 上面建立 Public Key 跟 Private Key 這兩把鑰匙,利用的指令為 ssh-keygen 這個命令;
- 再來,將 Private Key 放在 Client 上面的家目錄,亦即 $HOME/.ssh/ , 並且修改權(quán)限為僅有該 User 可讀的狀態(tài);
- 最後,將那把 Public Key 放在任何一個您想要用來登入的主機(jī)的 Server 端的某 User 的家目錄內(nèi)之 .ssh/ 裡面的認(rèn)證檔案即可完成整個程序。
說是好像很困難的樣子,其實(shí)步驟真的很簡單,我們依序來進(jìn)行作業(yè)好了!假設(shè)前提:
- Server 部分為 linux.dmtsai.tw 這部 192.168.0.2 的主機(jī),欲使用的 User 為 test 這個帳號;
- Client 部分為 test2.dmtsai.tw 這部 192.168.0.100 PC 的 test2 這個帳號, 他要用來登入 192.168.0.2 這部主機(jī)的 test 這個帳號。
- 在 Client 端建立 Public 與 Private Key :
建立的方法真的是簡單到不行!直接在 192.168.0.100 這個 Client 上面,以 test2 這個帳號,使用 ssh-keygen 這個指令來進(jìn)行 Key 的產(chǎn)生即可!不過,需要注意的是, version 1 與 version 2 使用的密碼演算方式不同,此外, version 2 提供兩個密碼演算的方法,我們這裡僅針對 version 2 的 RSA 這個演算方法進(jìn)行說明!
[test2@test2 ~]$ ssh-keygen -t rsa <==這個步驟在產(chǎn)生 Key pair Generating public/private rsa key pair. Enter file in which to save the key (/home/test2/.ssh/id_rsa): <==這裡按下Enter Enter passphrase (empty for no passphrase): <==這裡按 Enter Enter same passphrase again: <==再按一次 Enter Your identification has been saved in /home/test2/.ssh/id_rsa. <==這是私鑰 Your public key has been saved in /home/test2/.ssh/id_rsa.pub. <==這是公鑰 The key fingerprint is: c4:ae:d9:02:d1:ba:06:5d:07:e6:92:e6:6a:c8:14:ba test2@test2.linux.org # 注意: -t 指的是『使用何種密碼演算方式?』由於我們使用 RSA , # 所以直接輸入 -t rsa 即可建立兩支 Keys ! # 此外,建立的兩把 Keys 都放置在家目錄下的 .ssh 這個目錄中! # 察看一下這兩把 Keys 吧! [test2@test2 ~]$ ll ~/.ssh total 12 -rw------- 1 test2 test2 887 Nov 12 22:36 id_rsa -rw-r--r-- 1 test2 test2 233 Nov 12 22:36 id_rsa.pub -rw-r--r-- 1 test2 test2 222 Oct 31 11:20 known_hosts |
請注意上面喔,我的身份是 test2 ,所以當(dāng)我執(zhí)行 ssh-keygen 時, 才會在我的家目錄底下的 .ssh/ 這個目錄裡面產(chǎn)生所需要的兩把 Keys ,分別是私鑰(id_rsa)與公鑰(id_rsa.pub)。另外一個要 特別注意的就是那個 id_rsa 的檔案權(quán)限啦!他必須要是 -rw------- 才好!否則內(nèi)容被人家知道了,那麼您的 Keys 不就有可能外洩了?所以請?zhí)貏e留意他的權(quán)限喔! 那麼那個 id_rsa.pub 則是『公鑰!』這個檔案必須要被放置到 Server 端才行!
- 在 Client 端放置私鑰:
在預(yù)設(shè)的條件中,我們的私鑰必需要放置在家目錄底下的 .ssh 裡面,那麼如果是 version 2 的 RSA 演算法,就需要放置在 $HOME/.ssh/id_rsa 當(dāng)中!咦!剛好使用 ssh-keygen 就是已經(jīng)產(chǎn)生在這個目錄下了,所以自然就不需要去調(diào)整他了!以我的 test2.dmtsai.tw 來看,那麼我的檔案就會放置在 /home/test2/.ssh/id_rsa 這個檔案就是私鑰啦!
- 在 Server 端放置可以登入的公鑰:
既然我們要讓 test2 可以用 test 這個帳號登入 linux.dmtsai.tw 這部主機(jī),那麼這部主機(jī)自然需要保有 test2 的 public key 囉!對的!所以我們必需要將 Client 端建立的 id_rsa.pub 檔案給他拷貝到 linux.dmtsai.tw 裡頭的 test 這個使用者的家目錄之下!那麼如果您還記得上面的 sshd_config 這個檔案的設(shè)定的話,那麼應(yīng)該就記得『 AuthorizedKeysFile 』這個設(shè)定吧!是的! 在被登入的主機(jī)的某個帳號,他的公鑰放置的檔案名稱預(yù)設(shè)就是這個項(xiàng)目所記載的!而他預(yù)設(shè)的檔名就是 authorized_keys 這個檔案名稱啦!那麼應(yīng)該怎麼做呢?
1. 先在 Client 端以 sftp 將公鑰丟到 test 上面去! [test2@test2 ~]$ cd ~/.ssh [test2@test2 .ssh]$ scp id_rsa.pub test@192.168.0.2:~/ test@192.168.0.2's password: id_rsa.pub 100% 233 0.2KB/s 00:00 2. 到 Server 上面,將公鑰轉(zhuǎn)存到 authorized_keys 檔案中! [test@linux ~]$ cd ~/.ssh [test@linux .ssh]$ cat ../id_rsa.pub >> authorized_keys |
請注意上面的機(jī)器!由於 authorized_keys 可以保存相當(dāng)多的公鑰內(nèi)容,因此, 可以使用 >> 的方式來將 Client 端的公鑰新增到該檔案內(nèi)!呵呵!做完這一步一後,未來 test2 就可以直接在 test2.dmtsai.tw 以
[test2@test2 ~]$ ssh test@linux.dmtsai.tw |
這樣就可以不需要輸入密碼囉!但是請注意, test 不能以 test2 登入 test2.linux.org 喔!
很簡單的步驟吧!這樣一來,就可以不需密碼的手續(xù)了!無論如何,您要記得的是:
- Client 必須製作出 Public & Private 這兩把 keys,且 Private 需放到 ~/.ssh/ 內(nèi);
- Server 必須要有 Public Key ,且放置到使用者家目錄下的 ~/.ssh/authorized_keys;
未來,當(dāng)您還想要登入其他的主機(jī)時,只要將您的 public key (就是 id_rsa.pub 這個檔案) 給他 copy 到其他主機(jī)上面去,並且新增到某帳號的 ~/.ssh/authorized_keys 這個檔案中!哈哈!成功!

安全設(shè)定: 老實(shí)說,大家都被『
SSH 是個安全的服務(wù)』所欺騙了!其實(shí) sshd 並不怎麼安全的!翻開 openssh 的過去歷史來看,確實(shí)有很多人是利用 ssh 的程式漏洞來取得遠(yuǎn)端主機(jī) root 的權(quán)限,進(jìn)一步黑掉對方的主機(jī)!
sshd 之所謂的『安全』其實(shí)指的是『
sshd 的資料是加密過的,所以他的資料在 Internet 上面?zhèn)鬟f時是比較安全的。 至於 sshd 這個服務(wù)本身就不是那樣安全了!所以說:『
非必要,不要將 sshd 對 Internet 開放可登入的權(quán)限,盡量侷限在幾個小範(fàn)圍內(nèi)的 IP 或主機(jī)名稱即可! 這很重要的喔!
好了,那麼關(guān)於安全的設(shè)定方面,有沒有什麼值得注意的呢?當(dāng)然是有啦! 我們可以先建議幾個項(xiàng)目吧!分別可以由:
- /etc/ssh/sshd_config
- /etc/hosts.allow, /etc/hosts.deny
- iptables
這三方面來著手進(jìn)行!底下我們就說一說吧!
/etc/ssh/sshd_config 一般而言,這個檔案的預(yù)設(shè)項(xiàng)目就已經(jīng)很完備了!所以,事實(shí)上是不太需要更動他的! 但是,如果您有些使用者方面的顧慮,那麼可以這樣修正一些問題呢!
- 禁止 root 的登入:
任何時候,不許 root 以遠(yuǎn)端連線的方式登入,都會是一個好主意!所以這裡蠻建議大家直接將 root 的登入權(quán)限拿掉吧!所以,可以修改 /etc/ssh/sshd_config 這個檔案的內(nèi)容為:
[root@linux ~]# vi /etc/ssh/sshd_config PermitRootLogin no <== 將他改成 no 吧! [root@linux ~]# /etc/init.d/sshd restart |
如此一來,以後 root 就不能以 ssh 登入囉!這樣還是比較好的啦! ^_^
- 不許某個群組登入:
有些特殊情況中,我們想要讓使用者只能使用 sendmail, pop3, ftp 等,但是不希望他可以遠(yuǎn)端連線進(jìn)來,那麼您可以這樣做:
1. 將這些使用者都?xì)w納在某一個特殊群組之下,例如 nossh 這個群組好了;
2. 在 /etc/ssh/sshd_config 當(dāng)中加入這一行:『 DenyGroups nossh 』
3. 重新啟動 sshd : /etc/init.d/sshd restart
這樣就OK啦!
- 不許某個使用者登入:
跟 DenyGroups 類似,使用 DenyUsers 即可!參考 sshd_config 的設(shè)定喔!
/etc/hosts.allow 及 /etc/hosts.deny 簡單的方法就是:
[root@linux ~]# vi /etc/hosts.allow sshd: 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4, 192.168.0.5: allow [root@linux ~]# vi /etc/hosts.deny sshd : ALL : spawn (/bin/echo Security notice from host `/bin/hostname`; /bin/echo; /usr/sbin/safe_finger @%h ) | /bin/mail -s "%d -%h security" root@localhost & : twist ( /bin/echo -e "\n\nWARNING connectin not allowed.". ) |
iptables 最後,『
鳥哥呼籲大家,不要開放 SSH 的登入權(quán)限給所有 Internet 上面的主機(jī)~』 這很重要喔~因?yàn)槿绻麑Ψ娇梢?ssh 進(jìn)入您的主機(jī),那麼......太危險了~

XDMCP 伺服器 考慮一個情況,如果您的 Linux 主機(jī)上面主要是用來作為圖形處理時,而且同時有多人需要用到那個功能, 那麼一部 Linux 是否一次僅能提供一個人處理那個軟體呢?嘿嘿!那可不一定喔!因?yàn)?Linux 有相當(dāng)優(yōu)秀的 X Window System ?。?br>
X Window 的 Server/Client 架構(gòu) X Window System 的架構(gòu)對於常常玩網(wǎng)路的朋友來說(這也包括鳥哥啦! @_@)實(shí)在不太好理解~ 因?yàn)?X Window System 在運(yùn)作的過程中,同樣包含了 X Server 與 X Client 這兩個東西, 但是他的作用卻與網(wǎng)路主機(jī)的 Server/Client 架構(gòu)大異其趣喔~先來說說 X Server/Client 所負(fù)責(zé)的東西:
- X Server: 他主要負(fù)責(zé)的是螢?zāi)划嬅娴睦L製與顯示。 X Server 可以接收來自 X client 的數(shù)據(jù), 將這些數(shù)據(jù)繪製呈現(xiàn)為圖面在螢?zāi)簧?。此外,我們移動滑鼠、點(diǎn)擊資料、由鍵盤輸入資料等等, 也會透過 X Server 來傳達(dá)到 X Client 端,而由 X Client 來加以運(yùn)算;
- X Client: 他主要負(fù)責(zé)的是資料的運(yùn)算。 X Client 在接受到 X Server 傳來的資料後,會經(jīng)由本身的運(yùn)算,而得到滑鼠應(yīng)該要如何移動、 點(diǎn)擊的結(jié)果應(yīng)該要出現(xiàn)什麼樣的資料、鍵盤輸入的結(jié)果應(yīng)該要如何呈現(xiàn)等等, 然後將這些結(jié)果告知 X Server ,讓他自行去繪製到螢?zāi)簧稀?/li>
這樣說可以理解嗎?也就是說,我們移動滑鼠或敲打鍵盤時, X server 可以接受到這些硬體所輸入的資料, 但他不知道應(yīng)該要怎麼作才好,就把這些資料告訴 X Client ,此時, X Client 就會將這些資料計(jì)算, 最後得到滑鼠應(yīng)該要如何移動與鍵盤的資料應(yīng)該要如何呈現(xiàn),並將這些結(jié)果告知 X Server , 而 X Server 就會經(jīng)由 X Client 的告知,而將那些數(shù)據(jù)資料在螢?zāi)簧厦娉尸F(xiàn)出來。
事實(shí)上, X Server 與 X Client 通常是在同一部機(jī)器上面的, 例如我們在 Linux 上面執(zhí)行有名的 KDE 這個桌面一樣。 但是 X Server/Client 卻不必然一定要在同一部機(jī)器上的, 也就是說,我們可以透過網(wǎng)路連接兩部主機(jī)的 X 系統(tǒng)呢! 這也是最早 X 系統(tǒng)開發(fā)時的概念。不過,這個時候的 X server 指的是哪一部呢?
舉個例子來說,我們可以在 Windows 系統(tǒng)上面執(zhí)行一套 X Win32 的軟體, 他可以連接到 Linux 的 X 上頭而讓使用者以圖形介面登入 Linux 。 此時,因?yàn)椤篨 Win 32』主要是在螢?zāi)簧厦骘@示,他的做用就是螢?zāi)焕L製,因此他是 X Server 。 不信的話,等一下我們測試底下的資料時,您會發(fā)現(xiàn),啟動 X win32 這套軟體後, 在 Windows 系統(tǒng)上就會出現(xiàn) port 6000 這個 X server 的 port 呢~而這個時候 X Win 32 軟體其實(shí)就是連接到 Linux 的某個程序,我們等一下要介紹的 XDMCP 就是其中一種。 這個 XDMCP 可以將 X Win32 傳送過來的資料運(yùn)算成可以繪製的數(shù)據(jù)而回傳給 X win 32 那套軟體, 此時的 XDMCP 程序就是一個 X Client 囉~
所以啦!如果您的 Windows 想要連接到 Linux 主機(jī)的話,那麼 Windows 就得要有可以執(zhí)行的 X Server 軟體啦~ 而 Linux 主機(jī)則必須要啟動一個可以接受 X Server 資料運(yùn)算的 X Client 啦~ 就是這樣說~
但是,這樣做有什麼好處呢?呵呵~最大的好處就是,
在伺服器上的 X Client 不需要知道 X Server 的硬體是什麼~因?yàn)樨?fù)責(zé)顯示的是 X server 的事情,管理硬體的動作也是 X server 在做, 在主機(jī)上的 X Client 只是將這些滑鼠移動與點(diǎn)擊還有鍵盤的輸入等的資料在主機(jī)端運(yùn)算後, 最後將結(jié)果傳送給 X Server 顯示而已。(當(dāng)然啦, X Client 的運(yùn)算內(nèi)容還是會用到主機(jī)端的設(shè)定檔與函式庫就是了。)
圖九、X server/client 的架構(gòu) 那麼什麼時候會出現(xiàn)多使用者連入 X 主機(jī)的情況呢?以鳥哥的例子來說,我們實(shí)驗(yàn)室有一部 Linux 在進(jìn)行數(shù)值模擬, 他輸出的結(jié)果是 NetCDF 檔案,我們必須使用 PAVE 這一套軟體去處理這些資料, 以繪製等濃度圖等等的。但是我們有兩三個人同時都會使用到那個功能, 偏偏 Linux 主機(jī)是放在機(jī)架櫃裡面的,要我們擠在那個小小的空間前面『站著』操作電腦, 可真是討人厭啊~這個時候,我們就會架設(shè)圖形介面的遠(yuǎn)端登入伺服器, 讓我們可以『
多人同時以圖形介面登入 Linux 主機(jī)』來操作我們自己的程 序! 很棒,不是嗎?!

設(shè)定 XDMCP XDM 是 X Display Manager 的簡稱,他的功能是什麼呢? 簡單的說,就是管理操控 X Server 的顯示啦~他主要有兩種管理方式, 如果 X Server/Client 在同一部機(jī)器上,那麼啟動 xdm 之後,就會產(chǎn)生一個 X server 了; 而如果 X server/client 不在同一部主機(jī)上面,那麼啟動 xdm 後,他就會透過網(wǎng)路去管理遠(yuǎn)端那部主機(jī)的 X server 了。而 XDMCP (X Display Manager Control Protocol) 就是負(fù)責(zé)監(jiān)聽來自網(wǎng)路上面對於 xdm 的要求的啦~
由 X11 (CentOS 使用的是 Xorg 這個計(jì)畫的 X11)提供的 display manager 為 xdm ,設(shè)定檔在
/etc/X11/xdm/xdm-config , 而著名的 KDE 與 GNOME 也都有自己的 display manager 管理程序,分別是 kdm 與 gdm , 設(shè)定檔則是
/etc/X11/xdm/kdmrc 與 /etc/X11/gdm/gdm.conf (不同的 distribution 這個檔案放置的目錄不太一樣)。我們可以透過三者中任何一者的 display manager 的設(shè)定檔來啟動 xdmcp 這個協(xié)定呢~
要啟用 xdmcp 的功能真的很簡單,如果您要啟用 xdm 的話,修改 /etc/X11/xdm/xdm-config 這個檔案, 找到底下這一行(一般在最後一行):
DisplayManager.requestPort: 0 |
將他修改成為:
!DisplayManager.requestPort: 0 |
亦即是註解掉,然後再重新啟動 xdm 就好了。而 kdm 與 gdm 的設(shè)定也類似,底下鳥哥主要以 kdm 來進(jìn)行 xdmcp 的架設(shè)。不過要注意的是,即使在 Linux 主機(jī)端不啟用 X Server (port 6000) 也是可以正確無誤的提供 X 介面的登入的~就如同上面提到的概念一般~ 但是,如果要獲得比較正確的訊息,那麼還是建議您,
啟用 kdm 時一併正確的啟動 X , 只是安全性上面就要注意一些了!好了,多說無益,來實(shí)作吧!
1. 先讓 kdm 支援 xdmcp 模式 [root@linux ~]# cd /etc/X11/xdm [root@linux xdm]# vi kdmrc [Xdmcp] Enable=1 # 大約是在 70 行左右。不要懷疑!真的只要這樣就好了! 2. 讓 client 可以透過 X 來登入系統(tǒng)!與權(quán)限有關(guān)的設(shè)定 [root@linux xdm]# vi Xaccess * # 為了安全性上面的需要,想要登入 X 的話,得要通過這個檔案的驗(yàn)證才行。 # 找到上面這一行,如果沒有這一行的話(整行只有一個 * ), # 就自行加入。這表示『不論來自哪裡,我都接受 X 登入』的意思! 3. 啟動 kdm 喔! [root@linux xdm]# /etc/init.d/xfs start # 就如同我們上面提到的, kdm 執(zhí)行後,可能的話,會在本機(jī)端啟動一個 X server 的, # 而我們這一版的 Xorg 要順利的啟動,得要先啟用 X font Server 才行, # 否則的話,您就得要到 /etc/X11/Xorg.conf 裡面去設(shè)定好每個字型的路徑才行。 [root@linux xdm]# kdm [root@linux xdm]# netstat -tlunp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 5920/X tcp 0 0 :::6000 :::* LISTEN 5920/X udp 0 0 :::177 :::* 5918/kdm # 要看到有 177 的 udp port 出現(xiàn)才行~ 因?yàn)槟鞘?xdmcp 協(xié)定的監(jiān)聽埠口。 # 不過,如果要看看是否有成功啟動 X 的話,就得要查閱 6000 這個 port 囉~ # 如果沒有看到 port 6000 的話,請查閱 /var/log/Xorg.0.log 喔! # 如果想要設(shè)定開機(jī)就自動執(zhí)行的話,可以利用 chkconfig 加入 xfs , # 也可以將 kdm 這個指令寫到 /etc/rc.d/rc.local 這個檔案中~ |
雖然是非必備的,不過為了避免困擾,這裡還是得要提醒大家。(因?yàn)?CentOS 不需要啟動 X 就能夠提供 xdmcp 登入) 鳥哥上面的測試是在 run level 為 3 的環(huán)境下,且整體在執(zhí)行的時候, /var/log/messages 與 /var/log/Xorg.0.log 這兩個檔案內(nèi)容中並沒有 kdm 的相關(guān)錯誤訊息~ 很重要??!因?yàn)槟承┨准绻麤]有成功的啟動 X 時,他就無法提供登入呢~

用戶端登入 用戶端是 Linux 主機(jī): 如果想要進(jìn)行 XDMCP 提供的 X 介面的登入 Linux 主機(jī)時,在 Linux 底下可是容易的很~ 底下的流程是在『用戶端』執(zhí)行的喔~不是剛剛那部 XDMCP 所在的 Linux 主機(jī)啦!
0. 請務(wù)必要在 X Window 當(dāng)中,進(jìn)入 X Window 的方式有: [root@client ~]# startx # 或 [root@client ~]# init 5 1. 在 X Window 的畫面當(dāng)中,啟用一個 shell ,然後輸入: [root@client ~]# xhost + 192.168.1.100 192.168.1.100 being added to access control list # 假設(shè)我剛剛那部 Linux 主機(jī)的 IP 為 192.168.1.100 [root@client ~]# init 3 <== 關(guān)閉 X Server 2. 在文字介面下輸入: [root@client ~]# X -query 192.168.1.100 # 進(jìn)入 X Window 囉! |
如果一切順利的話,您應(yīng)該就能夠到 X Window 的畫面底下去登入遠(yuǎn)端主機(jī)囉~
用戶端是 Windows 主機(jī): 如果想要進(jìn)行 XDMCP 提供的 X 介面的登入 Linux 主機(jī)時,在 Windows 底下就得要使用其他軟體來支援了。例如:
這裡鳥哥用 X-Win32 來進(jìn)行測試。正個運(yùn)作流程是這樣的:
- 安裝 X-Win32 ,很簡單~就是直接執(zhí)行下一步即可。比較可惜的是,這個軟體目前沒有中文支援喔!
- 直接在『開始』-->『程式集』-->『X Win 32』執(zhí)行『X-Win32』這支程式~會出現(xiàn)如下圖:
圖十、X Win 32 執(zhí)行範(fàn)例
上面只是在告訴我們,這個軟體需要註冊。但是我們只是試用而已,所以可以直接按下 Evaluation 即可。 不過,試用版有連線三十分鐘的限制就是了~@_@
- 在出現(xiàn)的視窗當(dāng)中,當(dāng)然要選擇 XDMCP 這個模式囉~
圖 11 、X Win 32 執(zhí)行範(fàn)例
- 因?yàn)槲覀兛梢灾苯咏o予一個 X server 的 IP,所以這裡我們可以選擇『Query』這個項(xiàng)目。 如果您是在 LAN 環(huán)境當(dāng)中,而且 Client/Server 是在同一個網(wǎng)段時,其實(shí)可以選擇 Broadcast 比較好用!無論如何,這裡鳥哥先以 Query 來介紹。
圖 12 、X Win 32 執(zhí)行範(fàn)例
- 接下來的畫面可以填入 IP 或主機(jī)名稱??!建議直接輸入 IP 啦!
圖 13 、X Win 32 執(zhí)行範(fàn)例
- 接下來的畫面只要填入一個簡單的好記得名稱即可!如果想要立即執(zhí)行的話,那個『Launch this session now』 可以直接打勾喔!
圖 14 、X Win 32 執(zhí)行範(fàn)例
- 理論上,這樣應(yīng)該就可以立即的進(jìn)行連線到 X Window Server 才對。不過,如果沒有成功呢? 沒關(guān)係!我們可以重新來修改一下設(shè)定啊~如果執(zhí)行了 X-Win32 之後,在工作列的右下角會出現(xiàn) X 圖示, 如下所示:
圖 15 、X Win 32 執(zhí)行範(fàn)例
將滑鼠指標(biāo)移動到 X 上頭,按下右鍵,可以得到如下的選單出現(xiàn):
圖 16 、X Win 32 執(zhí)行範(fàn)例
在上圖上面按下『XConfig』就可以出現(xiàn)底下的圖示:
圖 17 、X Win 32 執(zhí)行範(fàn)例
然後選擇我們剛剛設(shè)定好的那個 session ,按下『Edit』,就可以開始修改剛剛的設(shè)定值囉~ 更多的選項(xiàng)請自行參考 X Win32 當(dāng)中的說明。此時,我們可以在工作列的 X 上面,按下左鍵, 應(yīng)該會出現(xiàn)所有可以用的 session ,請選擇 linux.dmtsai.tw 那個 session ,如果一切順利, 就會出現(xiàn)如下的畫面:
圖 18 、X Win 32 執(zhí)行範(fàn)例
輸入帳號密碼之後,嘿嘿!立刻就可以在 Windows 上面看到您 Linux 主機(jī)的 X Window 畫面了~ 感動吧~ ^_^
Tips: 事實(shí)上,xdmcp 真的很容易設(shè)定的~鳥哥曾經(jīng)以 gdm (設(shè)定檔為 gdm.conf) 及 kdm 分別設(shè)定過, 執(zhí)行上都沒有問題。不過,需要特別留意的是,因?yàn)?X Window 執(zhí)行的資料量實(shí)在是太大了, 所以,如果您在 Internet 上面使用 ADSL 傳輸?shù)脑挘胍孢@個玩意兒~ 奉勸您:『別想了~』這東西主要還是應(yīng)用在內(nèi)部網(wǎng)域當(dāng)中的啦! | |

關(guān)閉 XDMCP 如果想要關(guān)掉的話,就這樣做:
[root@linux xdm]# killall -9 kdm [root@linux xdm]# /etc/init.d/xfs stop |
這樣就可以將 xdmcp 給他關(guān)掉囉~ ^_^

VNC 伺服器 雖然 xdmcp 就已經(jīng)很好用了,不過,就以傳輸速度上來講,他真的是慢啊~~ 這個時候,我們可以利用 VNC (Virtual Network Computing) 這個好用的咚咚來進(jìn)一步設(shè)定我們的 X Window 登入系統(tǒng)喔。
VNC 必須要透過 VNC Server 與 VNC client 軟體的呼相搭配,就可以進(jìn)行比較快速一點(diǎn)的資料傳輸。 而 VNC 如果想要漂亮的一點(diǎn)的話,也是需要搭配 xdmcp 的啦~因?yàn)槿绻羌兇馐褂?VNC 連接到 Xorg (或 XFree86) 那個簡單的畫面,真的是....有點(diǎn)不好用~
其實(shí) VNC Server 會在主機(jī)多開一個程序在等待 Client 的登入要求, 等到 Client 登入之後,才去執(zhí)行 Window manager 的啟動。而這個 Window manager 的啟動方式有很多種, 最陽春的就是利用 Xorg 預(yù)設(shè)的 twm 這個視窗管理程式,他真的是不好看~ 畫面有點(diǎn)像這樣:
圖 19 、使用 twm 連線為 VNC Server 的執(zhí)行範(fàn)例 真的不很好看喔~那怎麼辦?其實(shí)我們可以透過更改 VNC 的啟動設(shè)定檔: xstartup 來設(shè)定不同的 Window manager , 另外,我們也可以透過啟用 kdm 或 gdm 這兩個好用的 display manager 來代為管理 Window manager 呢~ 鳥哥比較喜歡使用查詢 (Query) XDMCP 的方式來啟動 VNC ,而不是直接啟動 startkde 這個程式的說~ 所以,底下我們就直接來設(shè)定可以連接到 xdmcp 上的 VNC Server 吧!
1. 先讓 kdm 支援 xdmcp 模式 [root@linux ~]# cd /etc/X11/xdm [root@linux xdm]# vi kdmrc [Xdmcp] Enable=1 2. 讓 client 可以透過 X 來登入系統(tǒng)!與權(quán)限有關(guān)的設(shè)定 [root@linux xdm]# vi Xaccess * 3. 啟動 kdm 喔! [root@linux xdm]# /etc/init.d/xfs start [root@linux xdm]# kdm [root@linux xdm]# netstat -tlunp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 5920/X tcp 0 0 :::6000 :::* LISTEN 5920/X udp 0 0 :::177 :::* 5918/kdm # 要看到有 177 的 udp port 與 port 6000 才行; # 如果沒有看到的話,就得要查詢底下幾個檔案的內(nèi)容,看看錯誤訊息了! # a. 必須查閱 netstat -tlunp # b. 必須查閱 /var/log/Xorg.log.0 # c. 必須查閱 /var/log/messages # d. 必須查閱 /var/log/kdm.log 4. 用某身份建立 passfile 給 VNC 連線時使用 # 因?yàn)?VNC 開的每個 port 都是給某特定使用者登入的,因此, # 每個 VNC server 都會啟用自己的 port 呢~據(jù)說最大可開放到 10 個~ # 鳥哥這裡假設(shè)利用 dmtsai 這個使用者來執(zhí)行 VNC ,那麼他就必須要有底下幾個動作: 4.1 建立連線用密碼 [root@linux xdm]# su dmtsai [dmtsai@linux xdm]$ vncpasswd Password: <== 這裡請輸入密碼 Verify: <== 再輸入一次~ # 特別注意,為了安全起見,密碼的長度是有限制的! # 至少要大於六個字元,且不能與帳號相同~ # 密碼建立後,會在 /home/dmtsai/.vnc/passwd 這個檔案中記錄了你的密碼~ # 同時,在這個目錄下,還有設(shè)定檔 xstartup 可以利用喔! ^_^ 4.2 修改設(shè)定檔 xstartup [dmtsai@linux xdm]$ vi /home/dmtsai/.vnc/xstartup # 將這個檔案內(nèi)的所有資料通通給他註解掉~不需要保留~ 4.3 離開此一身份使用者的畫面 [dmtsai@linux xdm]$ exit 5. 修改 /etc/sysconfig/vncserver 檔案內(nèi)容 # 這個檔案是 FC4 預(yù)設(shè)的啟動 VNC 的讀取檔,所以我們可以修改他~ [root@linux xdm]# vi /etc/sysconfig/vncservers # 將原本的資料改成這樣: VNCSERVERS="2:dmtsai" VNCSERVERARGS[2]="-geometry 800x600 -query localhost" # 意思是說,我們要啟動一個 VNC 在 port 5900+2 即 5902 的意思, 6. 啟動 VNC server [root@linux xdm]# /etc/init.d/vncserver start # 此時在 /home/dmtsai/.vnc/ 裡面應(yīng)該會有幾個檔案您應(yīng)該要注意的, # 最重要的就是 dmtasi.linux.dmtsai.tw:2.log 這個檔案,檔名的由來是: # username.hostname.domainname:[port number].log ,因?yàn)槲覀兪菃⒂?5902 , # 所以就有 :2.log 的附檔名啦~務(wù)必看到裡面沒有錯誤才行喔~ # 如果發(fā)現(xiàn)找不到/usr/X11R6/lib/X11/xserver/SecurityPolicy 的錯誤,先略過不要緊~ 7. 查閱設(shè)定結(jié)果 [root@linux xdm]# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5802 0.0.0.0:* LISTEN 15287/Xvnc tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 15287/Xvnc tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 15019/X tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 15287/Xvnc tcp 0 0 :::6000 :::* LISTEN 15019/X tcp 0 0 :::6002 :::* LISTEN 15287/Xvnc udp 0 0 0.0.0.0:32924 0.0.0.0:* 15287/Xvnc udp 0 0 :::177 :::* 15017/kdm |
設(shè)定好像也很簡單喔~那麼鳥哥幹嘛講這麼多原理? 原因無他,因?yàn)橄M蠹铱梢栽诓煌?Linux distributions 也能夠順利的架設(shè)好 XDMCP 與 VNC ,如果您能夠善用登錄檔的內(nèi)容資訊, 那麼應(yīng)該會比較容易 debug 的啦~ ^_^
另外,事實(shí)上啟動 VNC 的 script 是由 vncserver 這個指令所啟用的, 您也可以直接利用某個身份直接下達(dá):
[root@linux ~]# vncserver :3 You will require a password to access your desktops. Password: <== 就輸入密碼吧! Verify: <== 再輸入密碼吧! New 'dmtsai.linux.dmtsai.tw:3 (dmtsai)' desktop is dmtsai.linux.dmtsai.tw:3 Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/dmtsai.linux.dmtsai.tw:3.log |
如此一來,就可以啟用一個 port 為 5903 的 VNC 服務(wù)囉~ 您可以再度的去到 logfile 查一查啊~至於關(guān)閉的話,可以用:
[root@linux ~]# vncserver -kill :3 |
這樣就能夠關(guān)閉囉~呵呵!那麼如果想要連接到 VNC Server 的話, 在 Linux 底下可以利用 KDE 的 krdc 這支遠(yuǎn)端連線程式,如果是 Windows 的話, 就得需要 VNC Client 囉~您可以前往底下的網(wǎng)站:
直接下載 Free Edition 來測試看看就好了。安裝過程我們就不提了~ 安裝完畢之後,直接執(zhí)行『開始』-->『程式集』-->『RealVNC』-->『Run VNC viewer』後, 出現(xiàn)如下的視窗:
圖 20 、VNC viewer 執(zhí)行範(fàn)例 輸入了您的主機(jī) IP 與該 VNC 對應(yīng)的 port 之後,會出現(xiàn)一個密碼視窗:
圖 21 、VNC viewer 執(zhí)行範(fàn)例 記得啊~這裡的密碼指的是『您利用 vncpasswd 所建立的密碼』,而不是登入者的密碼啊~ 按下 Enter 之後,如果順利的話,就會出現(xiàn)如下的圖示囉~
圖 22 、VNC viewer 執(zhí)行範(fàn)例
圖 23 、VNC viewer 執(zhí)行範(fàn)例 很不錯吧! ^_^ 這樣就能夠在 Client 端登入 Linux 主機(jī)囉~ 而且還可以多人共用呢~真是棒~ ^_^。但是,如果您設(shè)定完畢之後, 在登錄檔老是出現(xiàn)這個咚咚: 『XDMCP fatal error: Manager unwilling Host unwilling』, 就是 /etc/X11/xdm/Xaccess 這個檔案的設(shè)定需要變更了!
另外,有些朋友一定會覺得奇怪,那就是,為甚麼我的 VNC 伺服器的 server / client 端畫面並不是同步的呢? 這是因?yàn)?Linux 本身提供多個 VNC server ,她們是各自獨(dú)立的,所以當(dāng)然就不會與 tty7 的畫面同步了。 但是如果您想要與 Linux 的 tty7 同步的話,可以利用 VNC 釋出的給 X Server 使用的模組來加以設(shè)定即可。 如果您是 CentOS 4.x 這個 distribution 的話,恭喜您,系統(tǒng)預(yù)設(shè)已經(jīng)將 vnc.so 這個模組釋出了,您可以查閱 /usr/X11R6/lib/modules/extensions/ 這個檔案,即可知道有沒有 vnc.so 這個模組。如果您沒有這個模組的話, 請參考
http://phorum.study-area.org/viewtopic.php?t=25713 這一篇文章的說明, 依序來設(shè)定吧!
[root@linux ~]# vi /etc/X11/xorg.conf (或 XF86Config) Section "Module" .... Load "vnc" EndSection # 在 Module 這個 section 當(dāng)中加入 vnc 這個模組即可 Section "Screen" Identifier "Screen0" Device "Videocard0" Monitor "Monitor0" Option "passwordFile" "/etc/vnc/passwd" DefaultDepth 16 ...... EndSection # 假設(shè)您的 vnc 密碼檔案放置在 /etc/vnc/passwd 裡頭, # 這個時候就得要將密碼檔內(nèi)容寫到 Screen 這個 section 當(dāng)中了 |
此時給他重新啟動一下 kdm 或者是重新進(jìn)入 run level 5 的時候,您就會發(fā)現(xiàn)多了一個 port 5900 呢, 嘿嘿,準(zhǔn)備同步登入吧 ^_^

RSH 伺服器 什麼是 RSH 伺服器呢?其實(shí),這是早期的不同主機(jī)之間互相『直接操作』對方資源的一個方法。 其實(shí)就好像使用『 ssh dmtsai@localhost date 』之類的執(zhí)行方法啦! 我們可以透過 rsh 來操作對方主機(jī)啊。這個 RSH 就是被稱為 R Shell 的咚咚囉~
目前 RSH 很少被使用到一般的伺服器上面,尤其是對 Internet 開放的主機(jī), 這是因?yàn)?RSH 的危險性很高!他不但是明碼傳輸,而且一個設(shè)定不良,可能會讓所有人都能使用 RSH 來登入主機(jī)! 不過,RSH 卻是操作叢集電腦 (cluster) 裡面最常見的服務(wù)之一!
所謂的叢集電腦,簡單的說就是『
將很多部主機(jī)透過網(wǎng)路連結(jié)在一起, 以其中一部主機(jī)作為主要操控電腦 (或者稱為 master) ,其他主機(jī)僅負(fù)責(zé)來自 master 的要求 (所以被稱為 slave);所有的電腦工作都是由 master 所掌控, slave 僅負(fù)責(zé)運(yùn)算的部分。』 這也就是說, slave 大概就僅提供 CPU 的運(yùn)算單元,其他的事都是 master 負(fù)責(zé)來運(yùn)作。 當(dāng)然,我們也是只要操控 master 那部主要電腦而已。在這樣的情況下, slave 接受 master 的指令, 最主要就是透過 RSH ??! (當(dāng)然,也可以透過 SSH 配合金鑰來達(dá)成這樣的工作!)。 關(guān)於更多的 cluster 的介紹,可以參考一下鳥哥之前寫的一篇小文章:
至於 RSH server 與 Client 的互動可以使用下面的圖示來查閱:
圖 24 、RHS Server/Client 互動示意圖 上圖中在 RSH server 當(dāng)中的幾個設(shè)定檔是這樣的:
- /etc/hosts:主要規(guī)範(fàn) RSH server/client 的主機(jī)名稱與 IP 對應(yīng)!
- /etc/hosts.equiv:規(guī)範(fàn)出哪一部 client 可以連上這部 RSH server;
- ~user/.rhosts:規(guī)範(fàn)出那個使用者可以不需要輸 入密碼即可執(zhí)行 RSH;
- /etc/pam.d/rsh:規(guī)範(fàn) root 能否使用 RSH 的設(shè)定檔。
雖然 RSH 目前已經(jīng)很少被使用,但是在內(nèi)部主機(jī)的連線上面還是有他的存在的價值啦! 因此,底下我們就來談一談如何玩弄這個 RSH 吧!
RSH Server 其實(shí) R Shell 有很多的工具與啟動的 port ,常見的 R Shell 工具有 rexec, rlogin, rsh 等, 而這些工具都對應(yīng)到不同的 port 上面,你可以到 /etc/services 上查閱一下 512, 513, 514 這三個 port 吧!
RSH Server 的啟動: 如
圖 24 所示,我們在 RSH Client 電腦上面想要使用 RSH Server 上頭的資料時, 那麼 RSH server 自然就得要啟動 RSH 這項(xiàng)服務(wù)囉!那麼如何啟動呢?簡單的很~ 就利用 super deamon 來啟動,
我們需要有 rsh 及 rsh-server 兩個套件才行!請自行安裝 吧! 另外, rsh-server 共提供三個服務(wù),分別是『 rexec, rlogin, rsh 』,我們先單純討論 rsh 吧! 安裝完畢之後,直接啟動即可:
[root@linux ~]# vi /etc/xinetd.d/rsh service shell { disable = no socket_type = stream wait = no user = root log_on_success += USERID log_on_failure += USERID server = /usr/sbin/in.rshd } # 沒錯!只要將 disable 改成 no 即可! [root@linux ~]# /etc/init.d/xinetd restart [root@linux ~]# netstat -tlnp | grep 514 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 23369/xinetd # 有看到 514 的 port 出現(xiàn)就對了! |
設(shè)定可以使用 RSH 的來源主機(jī)與帳號: /etc/hosts, /etc/hosts.equiv, ~user/.rhosts 假設(shè)我已經(jīng)在 /etc/hosts 裡面做好了我內(nèi)部主機(jī)的 IP 與主機(jī)名稱的對應(yīng)了, 例如,我 192.168.1.2 機(jī)器的 /etc/hosts 裡面是這樣的:
[root@linux ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain 192.168.1.2 rsh.server rshserver 192.168.1.100 rsh.client rshclient # 上面僅有兩部主機(jī),假設(shè) RSH server 的 IP 是 192.168.1.2 啦! |
這個檔案很重要,因?yàn)槲覀兊?RSH 通常是利用主機(jī)名稱來作為指令的下達(dá)的, 所以囉,您區(qū)域網(wǎng)路內(nèi)的主機(jī)名稱與 IP 必須要設(shè)定的能夠?qū)?yīng)的起來,否則問題就大了。 在上表當(dāng)中,你會發(fā)現(xiàn)到,其實(shí)鳥哥的重點(diǎn)是那部 rsh.server 的機(jī)器, 當(dāng)我想要讓 192.168.1.100 亦即是 rsh.client 那部機(jī)器連進(jìn)來 rsh.server 執(zhí)行一些指令的話, 那我就得要啟動權(quán)限才行!此時就得要 /etc/hosts.equiv 來處理了。這個檔案的格式是這樣的:
[root@linux ~]# vi /etc/hosts.equiv rsh.client dmtsai # 這個檔案的格式是 [hostname] [username] # 將你要開放的使用者與某主機(jī)給他對應(yīng)好寫上去即可! |
這樣就做好了設(shè)定了!未來任何想要登入這部 rsh.server 機(jī)器的主機(jī),只要將他的主機(jī)名稱與 IP 對應(yīng)寫入 /etc/hosts ,然後再將該主機(jī)名稱寫入 /etc/hosts.equiv ,就成功了! 這個檔案的設(shè)計(jì)只要是在規(guī)範(fàn)『可以不用輸入密碼就能夠進(jìn)入本機(jī)執(zhí)行指令』的設(shè)定啦! 但是請注意,『
在預(yù)設(shè)的情況下, root 是不允許使用 rsh 登入 rsh.server 機(jī)器的。』這個很重要!不要使用 root 一直測試啊!沒有用的。 更多的 hosts.equiv 設(shè)定值,請參考 man hosts.equiv 囉!
但你可能會發(fā)現(xiàn)一件事,那就是每部主機(jī)與使用者都需要配合的話,但 /etc/hosts.equiv 預(yù)設(shè)僅有 root 可修改, 如此一來實(shí)在不好管理!此時我們可以使用使用者家目錄的檔案來處理喔!那就是 ~/.rhosts 囉! 這個檔案的設(shè)定就更簡單了!只要將使用者預(yù)計(jì)要登入的那部主機(jī)名稱寫入即可!
[root@linux ~]# vi ~dmtsai/.rhosts rsh.client |
這樣就 OK 啦!意思是說,我這部 rsh.server 上有個 dmtsai 的使用者,他可以讓 rsh.client 這個主機(jī)登入並且不需要密碼即可進(jìn)行 R Shell 的相關(guān)指令下達(dá)工作! 同樣的,如果我還想讓其他使用者可以由不同的主機(jī)登入這部 rsh.server 進(jìn)行 RSH 的話, 同樣在他的家目錄新增 .rhosts 這個檔案即可!如果想要讓未來新增的使用者都具有這個功能, 那就這樣做:
[root@linux ~]# vi /etc/skel/.rhosts rsh.client |
未來新增使用者時,他們的家目錄底下就會自動產(chǎn)生 .rhosts 的檔案囉! ^_^
讓 root 也可以使用 RSH : 先通知一聲,鳥哥不建議您這樣做!但是,如果萬一您需要某些服務(wù)是 root 也需要的, 那或許就得要開放 root 使用 RSH 登入主機(jī)了。其實(shí) root 不能使用 rsh 是因?yàn)?PAM 的問題而已,所以,你只要將 /etc/pam.d/rsh 這個檔案註解掉一行即可:
[root@linux ~]# vi /etc/pam.d/rsh #%PAM-1.0 # For root login to succeed here with pam_securetty, "rsh" must be # listed in /etc/securetty. auth required pam_nologin.so #auth required pam_securetty.so auth required pam_env.so auth required pam_rhosts_auth.so account required pam_stack.so service=system-auth session required pam_stack.so service=system-auth |
將上面這一行註解掉,立刻就能讓 root 登入 rsh 主機(jī)啦!當(dāng)然啦,如果您擔(dān)心有問題, 那麼修改另一個檔案也可以:
[root@linux ~]# vi /etc/securetty .....(省略)..... rsh |
加入這一行也行!注意,上面這兩個檔案是具有相關(guān)性的,所以,您只要修改任何一個即可, 不必兩個同時進(jìn)行!然後將主機(jī)名稱與 root 的對應(yīng)寫入
/etc/hosts.equiv 檔案中即可!你的 root 就能夠使用 rsh 囉!但是,鳥哥還是不很建議開放 root 使用 RSH 喔!注意注意!

RSH Client 這個 RSH client 的指令 rsh 預(yù)設(shè)是不給 root 執(zhí)行的!所以不要使用 root 來測試! 另外, RSH Client 最好與 RSH server 具有相同的帳號來執(zhí)行 rsh 比較不會有問題喔!
測試 RSH : 接下來,當(dāng)然要進(jìn)行測試囉~請到 rsh.client 那部機(jī)器上面,使用 rsh 這個指令來下達(dá)指令吧!
[dmtsai@rshclient ~]$ rsh [-l 遠(yuǎn)端帳號] [遠(yuǎn)端主機(jī)名] [遠(yuǎn)端主機(jī)指令] 參數(shù): -l :一般來說, server 與 client 『要有相同的使用者帳號名稱』比較好的! 如果沒有的話,那麼您必須要指定 server 的使用者帳號名才行! 遠(yuǎn)端主機(jī)名 :您要登入的那部 rsh.server 主機(jī)名稱,記得與 /etc/hosts 相應(yīng)! 遠(yuǎn)端主機(jī)指令:您要在遠(yuǎn)端機(jī)器上面下達(dá)什麼指令? 範(fàn)例一:在 rsh.server 上面下達(dá) ls -l / 這個指令: [dmtsai@rshclient ~]$ rsh rsh.server 'ls -l /' .....輸出省略..... # 注意喔,我是使用 dmtsai 這個一般身份使用者,而且 rshserver rshclient # 兩部主機(jī)上面都有一個名為 dmtsai 的使用者帳號才行喔!至於那個 ls -l / # 則是在 rsh.server 主機(jī)上面的指令!留意留意! |
一般來說,由於 RSH server/client 最好是要有相同的帳號,如此一來才能夠避免很多不必要的權(quán)限問題( permission denied. )。所以說,通常 RSH 可能會搭配後續(xù)會繼續(xù)談到的 NIS/NFS 等伺服器才是! 這樣瞭呼?
另外, rsh 後續(xù)的指令通常僅適合單一指令而已,所以如果你的指令串很長 (接了很多參數(shù)), 那最好將那一整串指令用單引號括起來,可以避免指令下達(dá)錯誤的問題喔! ^_^
利用 rcp 複製: 除了 rsh 可以在遠(yuǎn)端直接操控系統(tǒng)外,我們可以透過 rcp 來進(jìn)行複製喔!其實(shí)這個 rcp 與 scp 幾乎一模一樣啦! 而且 rcp 的參數(shù)幾乎與 cp 一模一樣哩!另外, rcp 也是透過 RSH 這個 514 的 port 來進(jìn)行資料的傳輸?shù)摹?簡單的說明如下:
範(fàn)例:先查閱遠(yuǎn)端主機(jī)有什麼資料,然後將他複製過來: [dmtsai@rshclient ~]# rsh rsh.server 'ls -l ~' drwx------ 3 dmtsai dmtsai 4096 Dec 27 2005 Desktop -rw-r--r-- 1 dmtsai dmtsai 3385 May 29 17:52 bashrc drwx------ 3 dmtsai dmtsai 4096 Mar 6 2006 mail -rw-r--r-- 1 dmtsai dmtsai 883888 May 29 17:51 netcdf.tar.gz drwxr-xr-x 2 dmtsai dmtsai 4096 Jul 26 16:05 test -rw-rw-r-- 1 dmtsai dmtsai 34816 Mar 19 2006 testing.ppt [dmtsai@rshclient ~]# rcp -r dmtsai@rsh.server:~/mail . # 加上 -r 是為了要複製目錄喔!否則的話,可以直接複製即可! |
再說一次,其實(shí)這個 RSH 目前僅有在某些特殊的場合才會用到了! 例如未來流行的新資訊『 Cluster 』!不過如果要玩 Cluster 的話, 得要加入 NIS/NFS 等伺服器哩!那就等您好好發(fā)展啦! ^_^

以 rsync 進(jìn)行同步鏡相備份 我們曾在基礎(chǔ)篇裡面談過
Linux 的備份策略, 該篇曾介紹常用的備份指令,包括 tar, dd, cp 等等,不過當(dāng)時並未介紹網(wǎng)路,所以有個很棒的網(wǎng)路工具沒有介紹, 那就是這個地方要談到的 rsync 啦!這個 rsync 可以作為一個相當(dāng)棒的異地備援系統(tǒng)的備份指令喔! 因?yàn)?rsync 可以達(dá)到類似『鏡相 (mirror) 』的功能呢!
rsync 最早是想要取代 rcp 這個指令的,因?yàn)?rsync 不但傳輸?shù)乃俣瓤欤宜趥鬏敃r, 可以比對本地端與遠(yuǎn)端主機(jī)欲複製的檔案內(nèi)容,而僅複製兩端有差異的檔案而已,所以傳輸?shù)臅r間就相對的降低很多! 此外, rsync 的傳輸方式至少可以透過三種方式來運(yùn)作:
- 在本機(jī)上直接運(yùn)作,用法就與 cp 幾乎一模一樣,例如:
rsync -av /etc /tmp (將 /etc/ 的資料備份到 /tmp/etc 內(nèi))
- 透過 rsh 或 ssh 的通道在 server / client 之間進(jìn)行資料傳輸,例如:
rsync -av -e ssh user@rsh.server:/etc /tmp (將 rsh.server 的 /etc 備份到本地主機(jī)的 /tmp 內(nèi))
- 直接透過 rsync 提供的服務(wù) (daemon) 來傳輸,此時 rsync 主機(jī)需要啟動 873 port:
1. 你必須要在 server 端啟動 rsync , 看 /etc/xinetd.d/rsync 即可;
2. 你必須編輯 /etc/rsyncd.conf 設(shè)定檔;
3. 你必須設(shè)定好 client 端連線的密碼資料;
4. 在 client 端可以利用:rsync -av user@hostname::/dir/path /local/path
其實(shí)三種傳輸模式差異在於有沒有冒號 (:) 而已,本地端傳輸不需要冒號,透過 ssh 或 rsh 時,就得要利用一個冒號 (:), 如果是透過 rsync daemon 的話,就得要兩個冒號 (::) ,應(yīng)該不難理解啦!因?yàn)楸镜囟颂幚砗芎唵危?而我們的系統(tǒng)本來就有提供 ssh 的服務(wù),所以,底下鳥哥將直接介紹利用 rsync 透過 ssh 來備份的動作喔。 不過,在此之前咱們先來看看 rsync 的語法吧!
[root@linux ~]# rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path] 參數(shù): -v :觀察模式,可以列出更多的資訊; -q :與 -v 相反,安靜模式,輸出的資訊比較少; -r :遞迴複製!可以針對『目錄』來處理!很重要! -u :僅更新 (update),不會覆蓋目標(biāo)的新檔案; -l :複製連結(jié)檔的屬性,而非連結(jié)的目標(biāo)原始檔案內(nèi)容; -p :複製時,連同屬性 (permission) 也保存不變! -g :保存原始檔案的擁有群組; -o :保存原始檔案的擁有人; -D :保存原始檔案的裝置屬性 (device) -t :保存原始檔案的時間參數(shù); -I :忽略更新時間 (mtime) 的屬性,檔案比對上會比較快速; -z :加上壓縮的參數(shù)! -e :使用的通道協(xié)定,例如使用 ssh 通道,則 -e ssh -a :相當(dāng)於 -rlptgoD ,所以這個 -a 是最常用的參數(shù)了! 更多說明請參考 man rsync 的解說! 範(fàn)例一:將 /etc 的資料備份到 /tmp 底下: [root@linux ~]# rsync -av /etc /tmp ....前面輸出省略.... sent 23007335 bytes received 32280 bytes 5119914.44 bytes/sec total size is 22870014 speedup is 0.99 # 第一次運(yùn)作時會花比較久的時間,因?yàn)槭状谓⒙?!如果再次備份呢?/span> [root@linux ~]# rsync -av /etc /tmp building file list ... done sent 77105 bytes received 20 bytes 154250.00 bytes/sec total size is 22870014 speedup is 296.53 # 瞧!立刻就跑完了!傳輸?shù)馁Y料也很少!因?yàn)樵俅伪葘?,僅有差異的檔案會被複製。 範(fàn)例二:利用 dmtsai 的身份,將 rsh.server 使用者家目錄複製到 /tmp [root@linux ~]# rsync -av -e ssh dmtsai@rsh.server:~ /tmp The authenticity of host 'rsh.server (192.168.1.2)' can't be established. RSA key fingerprint is 29:b8:a9:32:ea:d8:ff:97:6c:42:3b:aa:11:ab:55:dd. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rsh.server' (RSA) to the list of known hosts. dmtsai@rsh.server's password: receiving file list ... done ....檔案輸出省略.... sent 8436 bytes received 43224862 bytes 2789245.03 bytes/sec total size is 43189031 speedup is 1.00 [root@linux ~]# ll -d /tmp/dmtsai drwxr-xr-x 22 dmtsai dmtsai 4096 Sep 18 23:25 /tmp/dmtsai # 瞧!這樣就做好備份啦!很簡單吧! |
你可以利用上面的範(fàn)例二來做為備份 script 的參考!不過要注意的是, 因?yàn)?rsync 是透過 ssh 來傳輸資料的,所以你可以針對 dmtsai 這個傢伙製作出免用密碼登入的 ssh 金鑰! 如此一來往後異地備援系統(tǒng)就能夠自動的以 crontab 來進(jìn)行備份了!簡單到爆!
免密碼的 ssh 帳號我們在上頭已經(jīng)講過了,撰寫 shell script 的能力也是必須要有的! 利用 rsync 來進(jìn)行你的備份工作吧! ^_^! 至於更多的 rsync 用法可以參考本章後面所列出的
參 考資料網(wǎng)站喔!

重點(diǎn)回顧: - 遠(yuǎn)端連線伺服器可以讓使用者在任何一部電腦登入主機(jī),以使用主機(jī)的資源或管理與維護(hù)主機(jī);
- 常見的遠(yuǎn)端登入服務(wù)有 rsh, telnet, ssh, vnc, 及 xdmcp 等;
- telnet 與 rsh 都是以明碼傳輸資料,當(dāng)資料在 Internet 上面?zhèn)鬏敃r較不安全;
- telnet 與 rsh 預(yù)設(shè)無法讓 root 的身份登入,不過可以藉由 pam 模組的修改而啟用 root 登入功能;
- ssh 由於使用金鑰系統(tǒng),因此資料在 Internet 上面?zhèn)鬏敃r是加密過的,所以較為安全;
- 但 ssh 還是屬於比較危險的服務(wù),請不要對整個 Internet 開放 ssh 的可登入權(quán)限,可利用 iptables 規(guī)範(fàn)可登入範(fàn)圍;
- ssh 的 public Key 是放在主機(jī)端,而 private key 是放在 client 端;
- ssh 的連線機(jī)制有兩種版本,建議使用可確認(rèn)連線正確性的 version 2 ;
- 使用 ssh 時,盡量使用類似 email 的方式來登入,亦即: ssh username@hostname
- client 端可以比對 server 傳來的 public key 的一致性,利用的檔案為 ~user/.ssh/known_hosts;
- ssh 的 client 端軟體提供 ssh, scp, sftp 等程式;
- 在 /etc/ssh/sshd_config 當(dāng)中可以取消 root 的登入權(quán)限與修改支援的 ssh 金鑰版本;
- 製作不需要密碼的 ssh 帳號可利用 ssh-keygen -t rsa 來製作 public, private Key pair;
- 上述指令所製作出的 public key 必須要上傳到 server 的 ~user/.ssh/authorized_keys 檔案中;
- 如果想以 X 圖形系統(tǒng)登入 Linux 主機(jī),則你必須要在 Client 主機(jī)啟動 X server , 需要在 Linux 主機(jī)啟動 X client ;
- Xdmcp 是透過 X display manager (xdm, gdm, kdm 等) 所提供的功能協(xié)定;
- 若 client 端為 Linux 時,需要在 X 環(huán)境下以 xhost 增加可連接到本機(jī) X Server 的 IP 才行;
- 除了 Xdmcp 之外,我們可以利用 VNC 來進(jìn)行 X 的遠(yuǎn)端登入架構(gòu);
- VNC 預(yù)設(shè)開的 port number 為 5900 開始,每個 port 僅允許一個連線;
- 控制 rsh client 是否可以連線進(jìn)入的設(shè)定檔在 /etc/hosts.equiv 或 ~username/.rhosts ;
- rsh 支援的 client 端軟體有 rsh, rlogin, rcp 等;
- rsync 可透過 ssh 的服務(wù)通道或 rsync --daemon 的方式來連線傳輸,其主要功能可以透過類似鏡像備份, 僅備份新的資料,因此傳輸備份速度相當(dāng)快速!

課後練習(xí) - Telnet 與 SSH 都是遠(yuǎn)端連線伺服器,為何我們都會推薦使用 SSH 而避免使用 Telnet 呢?原因何在?
因?yàn)?Telnet 除了使用『明碼』傳送資料外,本身 telnet 就是很容易被入侵的一個伺服器,所以當(dāng)然也就比較危險了。 至於 ssh 其實(shí)也不是很安全的!由臺灣電腦危機(jī)處理小組的文件可以明顯的發(fā)現(xiàn) openssl + openssh 也是常常有漏洞在發(fā)佈!不過,比起 telnet 來說,確實(shí)是稍微安全一些!
- 請嘗試說明 SSH 在 Server 與 Client 端連線時的封包加密機(jī)制;
利用 key pair 來達(dá)到加密的機(jī)制:Server 提供 Public Key 給 Client 端演算 Private key ,以提供封包傳送時的加密、解密!
- 請問 SSH 的設(shè)定檔是哪一個?如果我要修改讓 root 無法使用 SSH 連線進(jìn)入我的 SSH 主機(jī),應(yīng)該如何設(shè)定?又,如果要讓 badbird 這個使用者無法登入 SSH 主機(jī),該如何設(shè)定?
SSH 設(shè)定檔檔名為 sshd_config ,通常放置在 /etc/ssh/sshd_config 內(nèi);如果不想讓 root 登入,可以修改 sshd_config 內(nèi)的參數(shù)成為:『PermitRootLogin no 』,並重新啟動 ssh 來設(shè)定!如果要讓 badbird 使用者無法登入,同樣在 sshd_config 裡面設(shè)定為:『DenyUsers badbird』即可!
- 在 Linux 上,預(yù)設(shè)的 Telnet 與 SSH 伺服器使用的埠口(port number)各為多少?
telnet 與 ssh 的埠口分別是:23 與 22!請參考 /etc/services 喔!
- 如果發(fā)現(xiàn)我無法在 Client 端使用 ssh 程式登入我的 Linux 主機(jī),但是 Linux 主機(jī)卻一切正常,可能的原因?yàn)楹危?防火牆、known_hosts...)
無法登入的原因可能有很多,最好先查詢一下 /var/log/messages 裡面的錯誤訊息來判斷,當(dāng)然,還有其他可能的原因?yàn)椋? - 被防火牆擋住了,請以 iptables -L -n 來察看,當(dāng)然也要察看 /etc/hosts.deny;
- 可能由於主機(jī)重新開機(jī)過, public key 改變了,請修改您的 ~/ssh/known_hosts 裡面的主機(jī) IP ;
- 可能由於 /etc/ssh/sshd_config 裡面的設(shè)定問題,導(dǎo)致您這個使用者無法使用;
- 在 /etc/passwd 裡面,您的 user 不具有可以登入的 shell ;
- 其他因素(如帳號密碼過期等等)
- 既然 ssh 是比較安全的資料封包傳送方式,那麼我就可以在 Internet 上面開放我的 Linux 主機(jī)的 SSH 服務(wù)了嗎?!請說明您選擇的答案的原因!
最好不要對 Internet 開放您的 SSH 服務(wù),因?yàn)?SSH 的加密函式庫使用的是 openssl ,一般 Linux distribution 使用的 SSH 則是 openssh ,這兩個套件事實(shí)上仍有不少的漏洞被發(fā)佈過,因此,最好不要對 Internet 開放,畢竟 SSH 對於主機(jī)的使用權(quán)限是很高的!
- 如果我想要將 server 的重要資料備份到 backserver,如果可以使用 rsync 透過 ssh 的通道, 你可以請嘗試這樣做:
- 先在 server 上面以 root 建置 ssh 的 public 與 private key pair ;
- 將 public key 傳送與設(shè)定到 backserver 上的某個使用者環(huán)境下;
- 在 backserver 上面製作好預(yù)計(jì)要存放備份資料的目錄!重點(diǎn)在於『權(quán)限』的設(shè)定上!
- 在 server 上面設(shè)定好 rsync 的備份 script ~
- 利用 crontab 每隔一段時間自動異地備份。
請依照上述的作法在您的兩部主機(jī)上面進(jìn)行測試與實(shí)作。(未提供解答)

參考資源
2002/11/14:第一次完成
2003/03/08:加入標(biāo)頭說明,與修改部分內(nèi)容,例如 Telnet 伺服器軟體的安裝等等,以及 SSH 的 putty 使用中文狀態(tài)!
2003/09/09:將本文進(jìn)行一些修訂,此外,加入了課後練習(xí)!
2005/07/02:將舊的文章移動到 這 裡 。
2005/07/07:好不容易將 VNC 還有 XDMCP 給他寫了寫~大家?guī)网B哥參考看看啊~
2005/07/09:加入了讓 VNC 與 tty7 同步的 vnc.so 模組的說明
2005/11/22:加入了 RSH 伺服器 的相關(guān)資料!
2006/09/18:將 putty 的介紹轉(zhuǎn)成 pietty 的介紹!因?yàn)?pietty 更好用!另外也將 rsh 重新改寫一下,校稿過!
2006/09/19:加入 rsync 的簡易說明與操作!最文末的習(xí)題可以瞧一瞧!
hint: 可以加入 RDP,那個 Windows 的遠(yuǎn)端桌面系統(tǒng)。