1. 程式人生 > >ssh - 安全外殼協議的詳解,為什麼使用它

ssh - 安全外殼協議的詳解,為什麼使用它

一:概念

SSH 為 Secure Shell 的縮寫,由 IETF 的網路工作小組(Network Working Group)所制定;SSH 為建立在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠端管理過程中的資訊洩露問題。SSH最初是UNIX系統上的一個程式,後來又迅速擴充套件到其他操作平臺。SSH在正確使用時可彌補網路中的漏洞。SSH客戶端適用於多種平臺。幾乎所有UNIX平臺-包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平臺,都可執行SSH。

二:功能

SSH,可以把所有傳輸的資料進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。
使用SSH,還有一個額外的好處就是傳輸的資料是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。

三:驗證

從客戶端來看,SSH提供兩種級別的安全驗證。

第一種級別(基於口令的安全驗證)

只要你知道自己帳號和口令,就可以登入到遠端主機。所有傳輸的資料都會被加密,但是不能保證你正在連線的伺服器就是你想連線的伺服器。可能會有別的伺服器在冒充真正的伺服器,也就是受到"中間人"這種方式的攻擊。

第二種級別(基於密匙的安全驗證)

需要依靠密匙,也就是你必須為自己建立一對密匙,並把公用密匙放在需要訪問的伺服器上。如果你要連線到SSH伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密匙進行安全驗證。伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公用密匙,然後把它和你傳送過來的公用密匙進行比較。如果兩個密匙一致,伺服器就用公用密匙加密"質詢"(challenge)並把它傳送給客戶端軟體。客戶端軟體收到"質詢"之後就可以用你的私人密匙解密再把它傳送給伺服器。

用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。

第二種級別不僅加密所有傳送的資料,而且"中間人"這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登入的過程可能需要10秒。

四:層次

SSH 主要由三部分組成:

傳輸層協議 [SSH-TRANS]

提供了伺服器認證,保密性及完整性。此外它有時還提供壓縮功能。 SSH-TRANS 通常執行在TCP/IP連線上,也可能用於其它可靠資料流上。 SSH-TRANS 提供了強力的加密技術、密碼主機認證及完整性保護。該協議中的認證基於主機,並且該協議不執行使用者認證。更高層的使用者認證協議可以設計為在此協議之上。

使用者認證協議 [SSH-USERAUTH]

用於向伺服器提供客戶端使用者鑑別功能。它執行在傳輸層協議 SSH-TRANS 上面。當SSH-USERAUTH 開始後,它從低層協議那裡接收會話識別符號(從第一次金鑰交換中的交換雜湊H )。會話識別符號唯一標識此會話並且適用於標記以證明私鑰的所有權。 SSH-USERAUTH 也需要知道低層協議是否提供保密性保護。

連線協議 [SSH-CONNECT]

將多個加密隧道分成邏輯通道。它執行在使用者認證協議上。它提供了互動式登入話路、遠端命令執行、轉發 TCP/IP 連線和轉發 X11 連線。

五:結構

SSH是由客戶端和服務端的軟體組成的,有兩個不相容的版本分別是:1.x和2.x。 用SSH 2.x的客戶程式是不能連線到SSH 1.x的服務程式上去的。OpenSSH 2.x同時支援SSH 1.x和2.x。

服務端是一個守護程序(daemon),他在後臺執行並響應來自客戶端的連線請求。服務端一般是sshd程序,提供了對遠端連線的處理,一般包括公共金鑰認證、金鑰交換、對稱金鑰加密和非安全連線。

客戶端包含ssh程式以及像scp(遠端拷貝)、slogin(遠端登陸)、sftp(安全檔案傳輸)等其他的應用程式。

他們的工作機制大致是本地的客戶端傳送一個連線請求到遠端的服務端,服務端檢查申請的包和IP地址再發送金鑰給SSH的客戶端,本地再將金鑰發回給服務端,自此連線建立。SSH 1.x和SSH 2.x在連線協議上有一些差異。

一旦建立一個安全傳輸層連線,客戶機就傳送一個服務請求。當用戶認證完成之後,會發送第二個服務請求。這樣就允許新定義的協議可以與上述協議共存。連線協議提供了用途廣泛的各種通道,有標準的方法用於建立安全互動式會話外殼和轉發(“隧道技術”)專有 TCP/IP 埠和 X11 連線。

SSH被設計成為工作於自己的基礎之上而不利用超級伺服器(inetd),雖然可以通過inetd上的tcpd來執行SSH程序,但是這完全沒有必要。啟動SSH伺服器後,sshd執行起來並在預設的22埠進行監聽(你可以用 # ps -waux | grep sshd 來檢視sshd是否已經被正確的運行了)如果不是通過inetd啟動的SSH,那麼SSH就將一直等待連線請求。當請求到來的時候SSH守護程序會產生一個子程序,該子程序進行這次的連線處理。

六:擴充套件

SSH協議框架中設計了大量可擴充套件的冗餘能力,比如使用者自定義演算法、客戶自定義金鑰規則、高層擴充套件功能性應用協議。這些擴充套件大多遵循 IANA 的有關規定,特別是在重要的部分,像命名規則和訊息編碼方面。

SSH採用面向連線的TCP協議傳輸 應用22號埠 安全係數較高。

七;啟動方法

方法一:使用批處理檔案

在伺服器端安裝目錄下有兩個批處理檔案"start-ssh.bat"和"stop-ssh.bat"。執行"start-ssh.bat"檔案就可以啟動SSH服務,要停止該服務只要執行"stop-ssh.bat"檔案即可。

方法二:使用SSH服務配置程式

在安裝目錄下,執行"fsshconf.exe"程式,它雖是SSH伺服器的配置程式,但也可以用來啟動和停止SSH服務。在彈出的"F-Secure SSH Server Configuration"視窗中,點選左面列表框中的"Server Settings"後,在右邊的"Service status"欄中會顯示伺服器狀態按鈕,如果伺服器是停止狀態,則按鈕顯示為"Start service",點選該按鈕就可啟動SSH服務,再次點選可停止SSH服務。

方法三:使用NET命令

在伺服器端的"命令提示符"視窗中,輸入"net start ″F-secure SSH Server″"命令,就可以啟動SSH服務,要停止該服務,輸入"net stop ″F-Secure SSH Server″"命令即可。其中"F-Secure SSH Server"為SSH伺服器名,"net start"和"net stop"為Windows系統啟動和停止系統服務所使用的命令。

啟動了SSH服務後,一定要關閉Telnet服務,這樣伺服器就處在安全環境之中了,不用再怕資料被竊取