詳細信息
Telnet用于因特網主機的遠程登錄。它可以使用戶坐在聯網的主機鍵盤前,登錄進入遠距離的另一聯網主機,成為那台主機的終端。這使用戶可以方便地操縱世界另一端的主機,就像它就在身邊一樣。
通過遠程登錄,本地計算機便能與網絡上另一遠程計算機取得“聯系”,并進行程序交互。進行遠程登錄的用戶叫做本地用戶,本地用戶登錄進入的系統叫做遠地系統。
每一個遠程機器都有一個文件(/etc/hosts.equiv),包括了一個信任主機名集共享用戶名的列表。本地用戶名和遠程用戶名相同的用戶,可以在 /etc/hosts.equiv文件中列出的任何機器上登錄到遠程主機,而不需要密碼口令。個人用戶可以在主目錄下設置相似的個人文件(通常叫 .rhosts)。此文件中的每一行都包含了兩個名字—主機名和用戶名,兩者用空格分開。.rhosts文件中的每一行允許一個登錄到主機名的名為用戶名的用戶無需密碼就可以登陸到遠程主機。如果在遠程機的 /etc/hosts.equiv 文件中找不到本地主機名,并且在遠程用戶的 .rhosts文件中找不到本地用戶名和主機名時,遠程機就會提示密碼。
列在/etc/hosts.equiv 和.rhosts文件中的主機名必須是列在主機數據庫中的正式主機名,昵稱均不許使用。為安全起見,rhosts 文件必須歸遠程用或根所有。
遠程終端類型和本地終端類型(在 TERM 變量環境中給定)相同。如果服務器支持,終端或窗口尺寸會被拷貝到遠程系統中,同時大小的變化也能反映出來。所有的回聲現象都發生在遠程站點,以緻于遠程登錄都是透明的(除了延遲情況)。流控制借助 和實現,并且輸入輸出中斷也得到很好的處理。
遠程登錄的相關操作:
一、遠程機上設置:
1、确保啟動相應的服務項目。本來遠程桌面需要的服務項目是默認開啟的,但我自己以前曾經将系統服務減少以保證運行速度和安全。所以在此使用過程中發現了麻煩所在,嘗試了半天,終于還是确認了需要開啟以下服務項目才能進行遠程登錄。
若以下服務項目沒開啟的話,遠程登錄會提示以下信息:
“客服端無法連接到遠程計算機。
連接可能沒有啟用,或者計算機太忙,無法接受新連接。也有可能網絡問題使你無法連接。
請以後再試。如果問題繼續出現,請跟系統管理員聯系。”
出現以上提示的話,可以考慮下是否服務項目沒啟動的問題。
遠程登錄需要的服務項目:
Server
Terminal Services
Telnet
NT LM Security Support Provider(Telnet需要依存與此服務,因此需要先啟動此服務)
2、取消防火牆對遠程控制的限制。
防火牆會導緻遠程機登錄本地機時連接超時的狀況。
3、添加遠程登錄桌面用戶:
依次點擊“開始——所有程序——管理工具——計算機管理”;
在系統工具中點擊“本地用戶和組”,雙擊右邊的“用戶”;
在右邊空白處右擊後選擇“新用戶”,在彈出的對話框中輸入“用戶名、全名、密碼、确認密碼”,其他的自己可以做設置。然後确定退出。
右擊新建的用戶名——屬性——隸屬于,在彈出的對話框中點“添加”——高級——立刻查找——選中名稱為“Remote Desktop Users”,确定退出,這樣就完成了遠程登錄帳戶的設置。
4、開啟遠程登錄設置:
右擊我的電腦——屬性——遠程——遠程桌面——在“允許用戶遠程連接到此計算機”前打勾。确定後即可在遠程機上登錄了。
二、本地機設置:
這個很簡單拉。
依次打開“開始菜單——所有程序——附件——通訊——遠程桌面連接”;
在打開的對話框中點擊“選項”,計算機上填入要登錄的主機的IP地址,還有剛才設置的用戶名和密碼,在“高級”選項中設置網絡類型來優化設置,然後點擊“連接”就行了。
寫完這篇,似乎會有一個安全性的問題,即使你設置了遠程登錄密碼。但也有被破解的可能性存在。
所以,若你暫時不使用遠程登錄的話,可以将設置的帳号禁用,禁用剛才提到的服務項目即可。
有兩種登錄使用遠程主機的方法。一種是一個用戶可以在一台聯網的主機上注冊,取得屬于他的帳号和密碼。一經注冊,就可以使用該帳号和密碼遠程登錄使用這台主機。還有一種是有許多因特網主機提供一些通過Telnet方式訪問的公共服務,該系統對任何用戶都有效,通常不需要口令。Telnet協議缺省使用的是23端口,但是這些基于Telnet方式的公共服務往往會有自己的特定端口,這需要用戶在連接時做出特别說明。
BBS
電子公告牌系統(BBS,Bulletin Board System)是因特網上的一種電子信息服務系統。它提供一塊公共區域,每個用戶都可以在上面發布信息或提出看法。
大部分Telnet方式的BBS由教育機構或研究機構管理。BBS按不同的主題劃分為很多個布告欄,布告欄的設立依據大多數使用者的要求和喜好,使用者可以閱讀他人關于某個主題的最新看法,也可以将自己的想法毫無保留地貼到公告欄中。同樣,别人的回應也是很快的(在人氣旺盛的BBS上,通常隻需要幾分鐘,甚至幾秒鐘)。
如果需要單獨的交流,用戶可以将想說的話直接發到某個人的BBS信箱中。如果想與正在BBS站上的某個人聊天,也可以啟動聊天程序,進行一對一或多個人的閑談。在BBS裡,人們之間的交流打破了空間、時間的限制,也無需考慮年齡、學曆、知識、社會地位、财富、外貌等。這樣,參與BBS的人可以處于一個平等的位置與其他人進行任何問題的探讨。
不少BBS站點也同時提供Web浏覽的訪問方式。但是由于Web方式本身的限制,有些BBS的功能(如聊天、發信息等)難以在Web下實現。因此,大部分使用者還是喜歡使用Telnet方式。
中國大陸是從1995年開始建立BBS的,最早的BBS站點有清華大學的水木清華、中國科技大學的浩瀚星雲和複旦大學的日月光華等。目前國内的BBS站點基本都使用火鳥(Firebird)系統,這是一套最早由台灣開發的中文BBS系統。由于它是開放源代碼的,因此比較大的站點一般都根據自己的實際需要加入了一些特殊的功能。
BBS上的言論通常都比較自由,特别是各高校的BBS。但随着社會對網絡的關注,各高校也逐步加強了對BBS上内容的管理。如何能做到既控制好站點上的一些過激言論,又保持原有特色,并且成為學校管理層與學生之間的一個上傳下達的通暢渠道,将是高校BBS管理的一個新課題。
MUD
MUD(Multi-User Dimension)可稱為“網絡遊戲”,俗稱“泥巴”。
MUD在國外已發展多年,許多站點已經非常成熟,加入的玩家超過千人。最早的MUD是Richard Bartle和Roy Trubshaw在1979年編寫的MUD1,運行于VAX/VMS主機上,它影響着其後的MUD服務器端程序的發展。現代MUD的發展源于1989年一位大學生在周末時編寫的遊戲程序,命名為TinyMUD。這是一個簡單的多人遊戲,任何在因特網上的多個玩家,隻要知道這個遊戲的地址和端口号,即可同時連入遊戲。這套系統運行于UNIX系統上,具有良好的可移植性,所以很快便廣為流傳。發展至今,世界各地有數千台UNIX主機上穩定地運行着MUD服務器端程序,有超過百萬的玩家參與其中,并且各種MUD站點還在繼續增加,這種規模和發展速度是原作者始料未及的。
傳統的MUD是基于文字模式以Telnet方式登錄的,現在已經出現支持圖形界面和聲音等的多媒體MUD站點。這些站點要求使用專門的用戶端程序,多媒體資料大部分存儲于用戶端,避免了大數據量的傳輸。有的站點甚至已經是基于Web界面了。不過也有人認為,MUD的魅力就在于文字描述帶來的無盡想象,引入圖形會限制玩家的想象。不管怎樣,這也算是MUD當前發展的一種新方向。
MUD也是基于因特網上的客戶機/服務器模式,玩家使用Telnet用戶端程序連接到MUD服務器上。遊戲程序的設計者和遊戲的管理者(俗稱“巫師”)在服務器端的程序上創造了龐大的虛拟現實空間,有崇山峻嶺、亭台樓榭,也有茂密的森林、廣袤的草原和沙漠,更有各種各樣的人物和怪獸等。玩家進入遊戲後要創建自己的角色,并通過控制這個角色的行動與其他角色對話,共同到幽奇的山洞中探險,或者為不同的陣營互相間大打出手。在一些遊戲中,玩家甚至可以自己建造房間、物品等。
命令
rlogin 的安全版本 slogin 和另外兩個 UNIX 工具 ssh 、scp 都屬于 Secure Shell suite,這是一個用于替代早期工具的界面和協議。
協議結構
rlogin 命令是:rlogin [-8EL] [-ec ] [-l 用戶名]主機名可選标記
可選标記:
-8EL 總是支持8位數據路徑,除非開始字符和停止字符不是 Ctrl-S 和 Ctrl-Q,否則 Rlogin 命令使用7位數據路徑,去除校驗位。
-e Character 改變換碼符。替換為 Character 選擇的字符。
-f 引起認證(Credentials)轉發。如果當前不是采用的 Kerberos 5認證方法,該标記就會被忽略。如果當前認證沒有标記為可轉發,将導緻認證失敗。
-F 引起認證(Credentials)轉發。另外遠程系統上的認證被标記為可轉發(允許它們傳送到另一個遠程系統上)。如果當前認證沒有标記為可轉發,将導緻認證失敗。
-k realm 如果遠程站領域與本地系統領域不同,那麼允許用戶指定遠程站的領域。為達到該目的,領域與DCE信元同義。如果當前不是采用的 Kerberos 5認證方法,該标記就會被忽略。
-l User 将遠程用戶名改為你所指定的名字。否則将你的本地用戶名應用于遠程主機。
主機名–建立遠程登錄會話的遠程機器
遠程登錄是Internet上較早提供的服務。用戶通過Telnet命令使自己的計算機暫時成為遠地計算機的終端,直接調用遠地計算機的資源和服務。利用遠程登錄,用戶可以實時使用遠地計算機上對外開放的全部資源,可以查詢數據庫、檢索資料,或利用遠程計算完成隻有巨型機才能做的工作。此外,Internet的許多服務是通過Telnet訪問來實現的。
與遠程計算機連接後,可實現資源共享。
軟件方式
目前鑒于用戶對于遠程登錄的需求和用戶偏于應用型的特征,很多軟件公司研發了遠程共享和遠程控制軟件來實現遠程登錄,比如像國外的Mikogo,Teamviewer,Netviewer、pcanywhere,以及國内的網絡人遠程控制軟件、花生殼等,而Windows系統遠程桌面也能實現相似的操作。
通過軟件方式實現遠程登錄,首先需要安裝遠程登錄軟件,多數情況需要兩個甚至多個終端同時安裝。其次,正常情況下服務器可以做到24小時工作,但常常禁止安裝此類遠程控制軟件,這就意味着可能在利用軟件進行遠程登錄公司服務器的時候需要同時開啟兩台機器和一台服務器,所以常常在移動辦公中,需要同時開啟公司電腦以作為中轉,通過遠程操控公司電腦實現遠程登錄。現在遠程控制軟件已經日漸專業化、品牌化,在操作性和安全性方面都有很大的進步,網絡人等遠程控制還采用U盾加密來保護遠程控制的安全。使用軟件進行登錄的優點就是簡單易學,操作方便,體積小,綠色,響應速度快,畫質清晰等特點,比如像Mikogo本身隻有1.6MB,國産的網絡人遠程控制軟件也隻是1M左右,适用于着重應用的用戶。
遠程登錄逐漸被人們認識和廣泛地應用于學習,工作和生活中,更多、更方便的遠程登錄方式也會慢慢豐富市場,滿足各種不同階層、不同目的的用戶需求。
應用進程的啟動
Rlogin的客戶進程和服務器進程使用一個TCP連接。當普通的TCP連接建立完畢之後,客戶進程和服務器進程之間将發生下面所述的動作。
客戶進程給服務器進程發送4個字符串:(a)一個字節的0;(b)用戶登錄進客戶進程主機的登錄名,以一個字節的0結束;(c)登錄服務器進程端主機的登錄名,以一個字節的0結束;(d)用戶終端類型名,緊跟一個正斜杠“/”,然後是終端速率,以一個字節的0結束。在這裡需要兩個登錄名字,這是因為用戶登錄客戶和服務器的名稱有可能不一樣。由于大多滿屏應用程序需要知道終端類型,所以終端類型也必須發送到服務器進程。發送終端速率的原因是因為有些應用随着速率的改變,它的操作也有所變化。例如vi編輯器,當速率比較小的時候,它的工作窗口也變小。所以它不能永遠保持同樣大小的窗口。
服務器進程返回一個字節的0。
服務器進程可以選擇是否要求用戶輸入口令。這個步驟的數據交互沒有什麼非凡的協議,而被當作是普通的數據進行傳輸。服務器進程給客戶進程發送一個字符串(顯示在客戶進程的屏幕上),通常是passWord:。假如在一定的限定時間内(通常是60秒)客戶進程沒有輸入口令,服務器進程将關閉該連接。通常可以在服務器進程的主目錄(homeDirectory)下生成一個文件(通常叫.rhosts),該文件的某些行記錄了一個主機名和用戶名。假如從該文件中已經記錄的主機上用已經記錄的用戶名進行登錄,服務器進程将不提示我們輸入口令。但是很多關于安全性的文獻,如[Curry1992],強烈建議不要采用這種方法,因為這存在安全漏洞。假如提示輸入口令,那麼我們輸入的口令将以明文的形式發送到服務器進程。我們所鍵入的每個字符都是以明文的格式傳輸的。所以某人隻要能夠截取網絡上的原始傳輸的分組,他就可以截獲用戶口令。針對這個問題,新版本的Rlogin客戶程序,例如
4BSD版本的客戶程序,第一次采用了Kerberos安全模型。Kerberos安全模型可以避免用戶口令以明文的形式在網絡上傳輸。當然,這要求服務器進程也支持Kerberos
([Curry1992]具體描述了Kerberos安全模型)。4)服務器進程通常要給客戶進程發送請求,詢問終端的窗口大小(将在後面解釋)。客戶進程每次給服務器進程發送一個字節的内容,并且接收服務器進程的所有返回信息。
同樣我們也采用了Nagle算法(在19.4節中曾經介紹),該算法可以保證在速率較低的網絡上,若幹輸入字節以單個TCP報文段傳輸。操作其實很簡單:用戶鍵入的所有東西被發送到服務器,服務器發送給客戶的任何信息返回到用戶的屏幕上。
另外,服務器和客戶之間還可以互相發送命令。在介紹這些命令之前,先介紹需要用到這些命令。
流量控制
默認情況下,流量控制是由Rlogin的客戶進程完成的。客戶進程能夠識别用戶鍵入的STOP和START的ASCII字符(ControlS和ControlQ),并且終止或啟動終端的輸出。
假如不是這樣,每次我們為終止終端輸出而鍵入的Control_S字符将沿網絡傳輸到服務器進程,這時服務器進程将停止往網絡上寫數據。但是在寫操作終止之前,服務器進程可能已經往網絡上寫了一窗口的輸出數據。也就是說,在輸出停止之前,成千上萬的數據字節還将在屏幕上顯示。圖26-3顯示了這個情況。
服務器進程執行STOP/START的情況
客戶的中斷鍵
當我們為中斷服務器正在運行的進程而鍵入一個中斷字符時(通常是DELETE或Control_C),會發生和流量控制相同的問題。這個情況和圖26-3所示的類似,在一條TCP連接的管道上,從服務器進程向客戶進程正在發送大量的數據,而客戶進程同時在向服務器進程傳輸中斷字符。而我們的本意是要中斷字符盡快終止某個進程,使屏幕上不再有任何響應輸出。
在流量控制和中斷鍵這兩種情況中,流量控制機制很少終止客戶進程到服務器進程的數據流。這個方向僅僅包含我們鍵入的字符。所以對于從客戶輸出到服務器的非凡輸入字符(Control_S和中斷字符)不需要采用TCP的緊急方式(urgentmode)。
窗口大小的改變
假如是窗口風格的顯示方式,當應用程序在運行的時候,我們還可以動态地改變窗口的大小。一些應用程序(典型的如那些操作整個窗口的應用程序,如全屏編輯器)需要知道窗口大小的變化。目前大多數Unix系統提供這種功能,可以告訴應用程序關于窗口大小的變化。
對于遠程登錄這種情況,窗口大小的變化發生在客戶端,而運行在服務器端的應用程序需要知道窗口大小變化。所以Rlogin的客戶需要采用某些方法來通知服務器窗口大小變化的情況以及新窗口的大小。
服務器到客戶的命令
現在我們介紹通過TCP連接,Rlogin服務器進程可以發送給客戶進程的4條命令。問題是隻有一條TCP連接可供使用,所以服務器進程必須給這些命令字節做标記,使得客戶進程可以從數據流中識别出這些是命令,而不是顯示在終端上。所以我們将使用TCP的緊急方式(在20.8節中曾經介紹)。
當服務器要給客戶發送命令時,服務器就進入緊急方式,并且把命令放在緊急數據的最後一個字節中。當客戶進程收到這個緊急方式通知時,它從連接上讀取數據并且保存起來,直到讀到命令字節(即緊急數據的最後一個字節)。這時候客戶進程根據讀到的命令,再決定對于所讀到并保存起來的數據是顯示在終端上還是丢棄它。
采用TCP緊急方式發送這些命令的一個原因是第一個命令(“清倉輸出(flushoutput)”)需要立即發送給客戶,即使服務器到客戶的數據流被窗口流量控制所終止。這種情況下,即服務器到客戶的輸出被流量控制所終止的情況是經常發生的,這是因為運行在服務器的進程的輸出速率通常大于客戶終端的顯示速率。另一方面,客戶到服務器的數據流很少被流量控制所終止,因為這個方向的數據流僅僅包含用戶所鍵入的字符。
客戶到服務器的命令
對于客戶到服務器的命令,隻定義了一條命令,那就是:将當前窗口大小發送給服務器。當客戶的窗口大小發生變化時,客戶并不立即向服務器報告,除非收到了服務器發來的0x80命令(圖26-4中有介紹)。
同樣,由于隻存在一條TCP連接,客戶必須對在連接上傳輸的該命令字節進行标注,使得服務器可以從數據流中識别出命令,而不是把它發送到上層的應用程序中去。處理的方法就是在兩個字節的0xff後面緊跟着發送兩個非凡的标志字節。
對于窗口大小命令,兩個标志字節是ASCII碼的字符‘s’。之後是4個16bit長的數據(按網絡字節順序),分别是:行數(例如,25),每列的字符數(例如,80),X方向的像素數量,Y方向的像素數量。通常情況下,後兩個16bit是0,因為在Rlogin服務器進程調用的應用程序中,通常是以字符為單位來度量屏幕的,而不是像素點。
上面我們介紹的從客戶進程到服務器進程的命令采用帶内信令(in-bandsignaling),這是因為命令字節和其他的普通數據一起傳輸。選擇0xff字節來表示這個帶内信令的原因是:一般用戶的操作不會産生0xff這個字節。所以說Rlogin是不完備的,假如我們采用某種方法,使得通過鍵盤就可以産生兩個連續的0xff字節,而且正好在這之前是兩個ASCII的‘s’字符,那麼下面的8個字節就會被誤認為是窗口大小了。
圖26-4中介紹的是從服務器到客戶的Rlogin命令,由于大多數的API采用的技術叫做“帶外數據(out-of-banddata)”,所以我們就稱它為帶外信令(out-of-bandsignaling)。但是回憶一下在20.8節中對TCP緊急方式的讨論,在那裡我們說緊急方式數據不是帶外數據,命令字節是按照普通數據流進行傳輸的,非凡之處是采用了緊急指針。
既然帶内信令被用來傳輸從客戶到服務器的命令,那麼服務器進程必須檢查從客戶進程收到的每個字節,看看是否有兩個連續的0xff字節。但是對于采用帶外信令的、從服務器傳輸到到客戶的命令,客戶進程不需要檢查收到的每個字節,除非服務器進程進入了緊急方式。即使在緊急方式下,客戶進程也僅僅需要留意緊急指針所指向的字節。而且由于從客戶進程到服務器的數據流量和相反方向的數據流量之比是1:20,這就暗示帶内信令适合于數據量比較小的情況(從客戶到服務器),而帶外信令适合于數據量比較大的情況(從服務器到客戶)。
客戶的轉義符
通常情況下,我們向Rlogin客戶進程鍵入的信息将傳輸到服務器進程。但是有些時候,我們并不需要把鍵入的信息傳輸到服務器,而是要和Rlogin客戶進程直接通信。方法是在一行的開頭鍵入代字符(tilde)“~”,緊跟着是下列4個字符之一:
以一個句号結束客戶進程。
以文件結束符(通常是Control_D)結束客戶進程。
以任務控制挂起符(通常是Control_Z)挂起客戶進程。
以任務控制延遲挂起符(通常是Control_Y)來挂起僅僅是客戶進程的輸入。這時,不管客戶運行什麼程序,鍵入的任何信息将由該程序進行解釋,但是從服務器發送到客戶的信息還是輸出到終端上。這非常适合當我們需要在服務器上運行一個長時間程序的場合,我們既想知道該程序的輸出結果,同時還想在客戶上運行其他程序。隻有當客戶進程的Unix系統支持任務控制時,後兩個命令才有效。



















