蘇開紅+肖樂
摘要:該系統(tǒng)設計的是一款基于WebServer的Linux遠程登錄軟件,該軟件適用于Unix內(nèi)核的任何Linux系統(tǒng)。采用了B/S架構,使用Java和C語言作為開發(fā)語言,使用到的主要技術有:Java網(wǎng)絡編程、多線程、模塊化設計思想、C語言的多進程、Unix環(huán)境高級編程、偽終端編程。前臺使用到的技術有:CSS、Html5、jquery。該系統(tǒng)以Web的形式展現(xiàn)在用戶面前,使用方便快捷,用戶只需打開瀏覽器即可登錄連接,不需要安裝客戶端軟件,大大方便了用戶,節(jié)約了時間,也減去開發(fā)和維護客戶端的成本。系統(tǒng)還具有擴展功能和擴展協(xié)議,以適應更加復雜的需求。軟件系統(tǒng)擁有良好的穩(wěn)定性和可靠性,是系統(tǒng)管理員和運維工程師與Linux服務器打交道的利器。
關鍵詞:Java;Linux;遠程登錄;WebServer
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)28-0101-04
Abstract: This is a Linux remote login system Based on WebServer, the software can be used in the Unix kernel for any Linux system. Java and C language as the development language. The main technologies used in the system are: Java network programming, multi threading, modular design, multi process of C language, Unix advanced programming environment, pseudo terminal programming. Front desk Technology: CSS, Html5, jquery.
This system used the B/S framework in the form of Web display in front of the user, users can login only need to open the browser, do not need to install client software, which greatly facilitates the user, also save time and minus the cost of developing and maintenance of the client. The system also has scalability, can extend the function, but also can expand the protocol to adapt to more complex needs. The software system has good stability and reliability. It is a tool to deal with the Linux server personnel, whether it is a system administrator or maintenance engineer.
Key words: java; linux; remote login; WebServer
1 背景
在工作、生活當中,總有一批人與服務器打交道,他們或是系統(tǒng)管理員,或是運維工程師,又或是程序員。而與服務器打交道不可避免的事情就是遠程登錄。遠程登錄,就是以當前計算機連接登錄遠在他方的計算機(可以是局域網(wǎng)中的某臺計算機,也可以是因特網(wǎng)上的計算機),從而可在當前計算機操作遠方的計算機,比如人們熟知的Telnet,SSH等,這些傳統(tǒng)的C/S架構的系統(tǒng),使用起來雖然很簡單方便,但是往往在使用之前需要安裝一個客戶端軟件,客戶端軟件又受操作系統(tǒng)影響,不同的操作系統(tǒng)需要安裝不同的客戶端軟件。這些問題不僅降低了用戶的體驗,還增加了開發(fā)、維護客戶端的成本。而如今是WEB的天下,如果遠程登錄使用B/S架構的WEB來實現(xiàn),還是比較有意義的。對系統(tǒng)而言:減去開發(fā)、維護客戶端的成本。對用戶而言,更加方便與簡單,以及可定制的用戶界面。
本文介紹了如何開發(fā)基于WebServer的Linux遠程登錄系統(tǒng)。該軟件服務器端WebServer部分使用java開發(fā),底層使用C語言開發(fā),使得Linux遠程登錄方式以WEB形式展現(xiàn)給用戶,系統(tǒng)還靈活運用了模塊化編程思想,使得系統(tǒng)具備良好的擴展性以及靈活性,只要使用者愿意,不僅可以遠程登錄,可對系統(tǒng)進行擴展,比如遠程控制,遠程教育等,當然,系統(tǒng)不僅對功能可以擴展,還可以對服務本身進行擴展。
2 系統(tǒng)設計
系統(tǒng)主要分為兩大部分,一是WebServer,主要用來對外服務,本系統(tǒng)中實現(xiàn)了WEB服務,但是也為其他服務留下接口以便進行擴展實現(xiàn)。二是Linux登錄調(diào)用,該部分是Linux遠程登錄的保障,是用戶登錄,執(zhí)行命令的核心。
2.1 WebServer的設計
如圖1所示,WebServer劃分為配置、服務、執(zhí)行、協(xié)議、日志五大模塊。配置模塊創(chuàng)建,初始化其他所有模塊,其他所有模塊都能通過配置模塊調(diào)用其他模塊,作用是降低其他模塊之間的耦合度,使模塊之間相互獨立,弱化相互關聯(lián)關系;服務模塊實現(xiàn)網(wǎng)絡服務,不間斷的監(jiān)聽著端口,等待瀏覽器或客戶端發(fā)送請求,如果有一個請求到達,馬上從配置模塊獲得一個執(zhí)行模塊處理請求;執(zhí)行模塊繼承了線程接口,以一個線程處理一個請求的原則實現(xiàn)處理多用戶請求任務,執(zhí)行模塊并不真正處理響應請求,而是先判斷出請求所使用的協(xié)議,在獲取一個協(xié)議模塊,委托給獲取的協(xié)議實例對象去處理響應此次請求;日志模塊是整個系統(tǒng)運行起來的情況記錄,分級別的記錄日志。endprint
2.2 遠程登錄業(yè)務的設計
遠程登錄主要的基礎業(yè)務有登錄,命令行,文件上傳、下載和文本編輯。登錄主要用于身份驗證以及調(diào)用shell,為用戶初始化shell環(huán)境從而使用戶可以進行命令行操作;在現(xiàn)實問題中,登錄到遠程計算機不僅能操作命令,還需要有文件傳送的功能和編輯文本文檔的功能。如圖2所示,登錄業(yè)務是其他所有業(yè)務的基礎,當然在本系統(tǒng)中并不是用戶身份驗證通過才算一個完整的登錄業(yè)務,在本系統(tǒng)中,只要啟動了登錄業(yè)務,其他業(yè)務就能使用,用戶身份驗證通不通過除了命令行業(yè)務對其他的功能業(yè)務沒有影響,因為其他業(yè)務是獨立的,可以單獨的開啟和關閉。身份驗證放在命令行中進行,只有身份驗證成功后才能進行命令行操作。文件上傳,是指本地文件上傳到遠程主機,為了降低安全風險,用戶不能提供目的路徑,上傳的文件存放在由系統(tǒng)指定的位置,上傳完畢系統(tǒng)會返回目的位置,以便用戶使用。文件下載,是用戶從遠程主機上下載文件到本機,用戶需要提供需要下載文件的路徑。文本編輯,是用來編輯遠程主機上的文本內(nèi)容,當用戶編輯完成點擊保存即可對文本的修改。
2.3 HTTP協(xié)議服務
HTTP協(xié)議只是WebServer服務協(xié)議的一種,只需要實現(xiàn)協(xié)議接口(interface Protocol)即可,實現(xiàn)思路是先解析http請求,根據(jù)請求再作出相應的響應。為了使HTTP協(xié)議服務具有處理邏輯的能力,加入Action接口,Action是業(yè)務邏輯的抽象,所有的業(yè)務邏輯可以通過實現(xiàn)Action接口來達到給系統(tǒng)添加新功能的目的。在處理復雜業(yè)務邏輯時,有可能需要區(qū)分客戶端。但由于http協(xié)議是無狀態(tài)的,并不能區(qū)分客戶端,所以引進會話(Session)概念,會話是客戶端請求服務器的一個全過程,從請求第一個頁面開始,到關閉客戶端這樣的過程算是一次會話。服務端給第一次請求的客戶端分配一個會話ID(SessionID),客戶端以后的所有請求中攜帶上SessionID,服務端根據(jù)SessionID來區(qū)分客戶端。因此需要一個全局對象來保存會話,可以稱為HTTP上下文環(huán)境。http協(xié)議服務邏輯如圖3所示:
2.4 Linux登錄服務
WebServer是對網(wǎng)絡服務,而遠程登錄服務實際上是此登錄服務,圖4是登錄服務的結構原理及進程安排,Java通過exec一個rls(Remote login service,即遠程登錄服務)程序并獲取它的標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)流,這樣就可以進程間通信,Java把用戶的指令寫入標準輸入流,再從標準輸出流中讀取命令的執(zhí)行結果。在rls程序中首先打開一個偽終端主從設備對(pty主從設備對),再fork一個子進程,在子進程中調(diào)用(exec) /bin/login(linux的登錄驗證程序,用戶登錄驗證通過后會啟動shell程序)程序,并把偽終端從設備設置為login程序的控制終端,這樣以后父進程的所有操作命令或者命令的執(zhí)行結果就可以通過偽終端主設備進行讀寫。
3 系統(tǒng)實現(xiàn)及關鍵技術
3.1 WebServer的實現(xiàn)
WebServer使用模塊化編程思想,具體分為五大模塊,他們分別是配置模塊、服務模塊、執(zhí)行模塊、協(xié)議模塊和日志模塊。每個模塊定義一個接口,模塊需要的功能只要去實現(xiàn)了接口中對應的方法即可。為了使模塊能進行配置,需要抽象一個配置接口,其他模塊只要繼承此接口就說明,該模塊可配置。還有,有的模塊具有共同的部分,就把他們抽象出來形成新的接口。WebServer的詳細設計如圖5,圖5所展示的是一個Webserver完成的類圖以及接口與接口,類與類,類與接口之間的關系。每個模塊對應一個接口,每個接口都有一個實現(xiàn)類。類圖中,配置模塊得到其他模塊的實例對象;日志模塊用于日志記錄,它將日志分為五個級別,分別是debug(用于系統(tǒng)調(diào)試)、info(普通日志信息)、warn(警告日志)、error(錯誤日志)、fatal(跟硬件有關的錯誤);執(zhí)行模塊是一個可用于多線程的模塊,它以一個線程處理一個請求方式執(zhí)行;服務模塊是用于監(jiān)聽端口,對外服務的模塊;協(xié)議模塊是為了處理不同協(xié)議而設定的,系統(tǒng)實現(xiàn)了HTTP協(xié)議,留下接口也是為了方便擴展。RLSModul接口是對需要初始化的抽象,實現(xiàn)該接口就擁有初始化功能。
3.2 HTTP協(xié)議服務
協(xié)議模塊是為處理不同協(xié)議而設定的,本系統(tǒng)中實現(xiàn)了HTTP協(xié)議,其他或自定義協(xié)議可以通過實現(xiàn)Protocol接口進行拓展。HTTP協(xié)議服務是完成Web服務的關鍵,其中主要做的工作是解析請求,響應請求,在設計中,為了解決HTTP協(xié)議無狀態(tài)的特點帶來的弊端,使用了會話機制,會話機制是為了使服務端對客戶端有一個記憶,分清楚哪一個請求是哪一個瀏覽器的,從而針對某個客戶端繼續(xù)上次的處理。HTTP協(xié)議服務類圖如圖6所示。
3.3 Linux系統(tǒng)底層調(diào)用
底層調(diào)用這一塊主要是負責調(diào)用Linux系統(tǒng)的登錄驗證程序,用戶身份驗證通過后再調(diào)用shell程序,shell就是用來執(zhí)行Linux操作命令的程序,為了使獲取到登錄驗證程序或shell的執(zhí)行結果,我們使用偽終端技術,偽終端由主從設備對組成,寫入到主設備的信息可以在從設備上讀取,反之在從設備上寫入的信息可以在主設備上讀取,他是多進程之間通信的有力手段。底層代用是用C語言實現(xiàn)的。
4 結束語
遠程登錄命令行界面如圖7所示,在遠程登錄系統(tǒng)服務端初始化登錄服務并啟動登錄驗證程序之后,服務器返回的信息是用戶名輸入提示信息,如:“user login:”字樣,待用戶鍵入用戶名,按下回車,客戶端向服務端發(fā)送用戶鍵入的命令,服務端處理之后,并將處理結果返回給瀏覽器客戶端,瀏覽器再將結果信息顯示在命令行中。本系統(tǒng)實現(xiàn)了登錄,文件上傳、下載,文本編輯的業(yè)務邏輯,如果還要添加業(yè)務邏輯,可以通過實現(xiàn)Action接口拓展功能。endprint
遠程上傳界面如圖8所示,有兩個輸入框,一個是目的路徑輸入框,另一個是本地文件選擇框,最后還有一個上傳按鈕。當用戶填寫好目的路徑,選擇好需要上傳的文件,點擊上傳按鈕式,瀏覽器將信息發(fā)送給服務端。服務端接收完成后,返回成功字樣。
本系統(tǒng)使用Java開發(fā)網(wǎng)絡服務部分,C語言開發(fā)底層調(diào)用,組合開發(fā)達到最佳效果。網(wǎng)絡服務部分使用Java網(wǎng)絡編程-套接字編程(Socket和ServerSocket);使用Java多線程(Thread和Runnable)處理多請求任務;使用Java Runtime類完成C程序的代用,C 語言完成系統(tǒng)登錄的底層實現(xiàn),Unix環(huán)境偽終端編程,多進程,終端IO操作。在WebServer實現(xiàn)上可以參考已存在的WEB服務器(Tomcat)原理,加以簡單的實現(xiàn)(實現(xiàn)HTTP協(xié)議為主),但是留下協(xié)議接口,以便擴展需要。在Web前臺使用html5,css3以及JQuery。Html用作顯示內(nèi)容,css提供樣式,JQuery負責向服務器請求數(shù)據(jù),并改變網(wǎng)頁顯示內(nèi)容。
比起傳統(tǒng)的遠程登錄,這種基于WebServer的遠程登錄系統(tǒng)更加優(yōu)秀,不管是使用上面還是設計上面,都全面超越了傳統(tǒng)的遠程登錄方式。
參考文獻:
[1] Cay S Horstmann. Java核心技術:卷Ⅰ,卷Ⅱ[M]. 北京: 機械工業(yè)出版社, 2014.
[2] 孫衛(wèi)琴. Java面向對象編程[M]. 北京: 電子工業(yè)出版社, 2006.
[3] 孫衛(wèi)琴, 李洪成. Tomcat 與 Java Web 開發(fā)技術詳解[M].2版.北京: 電子工業(yè)出版社, 2009.
[4] Elliotte Rusty Harold.Java網(wǎng)絡編程[M].4版.北京: 中國電力出版社,2014.
[5] 方騰飛, 魏鵬, 程曉明. Java并發(fā)編程的藝術[M]. 北京: 機械工業(yè)出版社,2015.
[6] Bruce Eckel. Java編程思想[M].4版.北京: 機械工業(yè)出版社, 2007.
[7] 孫鑫. Servlet/JSP深入詳解—基于Tomcat的Web開發(fā)[M]. 北京: 電子工業(yè)出版社, 2008.
[8] Matt Welsh,Lar Kaufman. Linux權威指南[M]. 北京: 中國電力出版社, 2000.
[9] DanielP Bovet. 深入理解LINUX內(nèi)核[M]. 北京: 中國電力出版社, 2008.
[10] D.坦思. LINUX與UNIX Shell編程指南[M]. 北京: 機械工業(yè)出版社, 2000.
[11] Gary Wrigh, W Richard Stevens. TCP/IP詳解[M]. 北京: 機械工業(yè)出版社, 2000.endprint