遠程登錄
遠程登錄
遠程登錄(rlogin)是一個UNIX命令,它允許授權用戶進入網路中的其它UNIX機器並且就像用戶在現場操作一樣。一旦進入主機,用戶可以操作主機允許的任何事情,比如:讀文件、編輯文件或刪除文件等。Rlogin:遠程登錄命令 rlogin:Remote Login in Unix systems
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方式的公共服務往往會有自己的特定埠,這需要用戶在連接時做出特別說明。
下面介紹兩種使用很廣泛的基於Telnet方式的公共服務:BBS和MUD。
電子公告牌系統(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(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連接建立完畢之後,客戶進程和伺服器進程之間將發生下面所述的動作。
1)客戶進程給伺服器進程發送4個字元串:(a)一個位元組的0;(b)用戶登錄進客戶進程主機的登錄名,以一個位元組的0結束;(c)登錄伺服器進程端主機的登錄名,以一個位元組的0結束;(d)用戶終端類型名,緊跟一個正斜杠“/”,然後是終端速率,以一個位元組的0結束。在這裡需要兩個登錄名字,這是因為用戶登錄客戶和伺服器的名稱有可能不一樣。由於大多滿屏應用程序需要知道終端類型,所以終端類型也必須發送到伺服器進程。發送終端速率的原因是因為有些應用隨著速率的改變,它的操作也有所變化。例如vi編輯器,當速率比較小的時候,它的工作窗口也變小。所以它不能永遠保持同樣大小的窗口。
2)伺服器進程返回一個位元組的0。
3)伺服器進程可以選擇是否要求用戶輸入口令。這個步驟的數據交互沒有什麼非凡的協議,而被當作是普通的數據進行傳輸。伺服器進程給客戶進程發送一個字元串(顯示在客戶進程的屏幕上),通常是passWord:。假如在一定的限定時間內(通常是60秒)客戶進程沒有輸入口令,伺服器進程將關閉該連接。通常可以在伺服器進程的主目錄(homeDirectory)下生成一個文件(通常叫.rhosts),該文件的某些行記錄了一個主機名和用戶名。假如從該文件中已經記錄的主機上用已經記錄的用戶名進行登錄,伺服器進程將不提示我們輸入口令。但是很多關於安全性的文獻,如[Curry1992],強烈建議不要採用這種方法,因為這存在安全漏洞。假如提示輸入口令,那麼我們輸入的口令將以明文的形式發送到伺服器進程。我們所鍵入的每個字元都是以明文的格式傳輸的。所以某人只要能夠截取網路上的原始傳輸的分組,他就可以截獲用戶口令。針對這個問題,新版本的Rlogin客戶程序,例如
4.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個位元組就會被誤認為是窗口大小了。
從伺服器到客戶的Rlogin命令,由於大多數的API採用的技術叫做“帶外數據(out-of-banddata)”,所以我們就稱它為帶外信令(out-of-bandsignaling)。但是回憶一下在20.8節中對TCP緊急方式的討論,在那裡我們說緊急方式數據不是帶外數據,命令位元組是按照普通數據流進行傳輸的,非凡之處是採用了緊急指針。
既然帶內信令被用來傳輸從客戶到伺服器的命令,那麼伺服器進程必須檢查從客戶進程收到的每個位元組,看看是否有兩個連續的0xff位元組。但是對於採用帶外信令的、從伺服器傳輸到到客戶的命令,客戶進程不需要檢查收到的每個位元組,除非伺服器進程進入了緊急方式。即使在緊急方式下,客戶進程也僅僅需要留意緊急指針所指向的位元組。而且由於從客戶進程到伺服器的數據流量和相反方向的數據流量之比是1:20,這就暗示帶內信令適合於數據量比較小的情況(從客戶到伺服器),而帶外信令適合於數據量比較大的情況(從伺服器到客戶)。
客戶的轉義符
通常情況下,我們向Rlogin客戶進程鍵入的信息將傳輸到伺服器進程。但是有些時候,我們並不需要把鍵入的信息傳輸到伺服器,而是要和Rlogin客戶進程直接通信。方法是在一行的開頭鍵入代字元(tilde)“~”,緊跟著是下列4個字元之一:
1) 以一個句號結束客戶進程。
2) 以文件結束符(通常是Control_D)結束客戶進程。
3) 以任務控制掛起符(通常是Control_Z)掛起客戶進程。
4) 以任務控制延遲掛起符(通常是Control_Y)來掛起僅僅是客戶進程的輸入。這時,不管客戶運行什麼程序,鍵入的任何信息將由該程序進行解釋,但是從伺服器發送到客戶的信息還是輸出到終端上。這非常適合當我們需要在伺服器上運行一個長時間程序的場合,我們既想知道該程序的輸出結果,同時還想在客戶上運行其他程序。只有當客戶進程的Unix系統支持任務控制時,后兩個命令才有效。