目前在互聯網上使用的諸如FTP、Telnet、POP等服務在本質上都是不安全的,它們在網絡上使用明文傳送口令和數據,黑客非常容易就可以截獲這些口令和數據,從而破壞數據的機密性和完整性。本文將介紹如何使用Linux下的SSH軟件在不安全的網絡環境下通過密碼機制來保證數據傳輸的安全。 SSH的英文全稱是Secure SHell。通過使用SSH,用戶可以把所有傳輸的數據進行加密,這樣即使網絡中的黑客能夠劫持用戶所傳輸的數據,如果不能解密的話,也不能對數據傳輸構成真正的威脅。另外,傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、POP提供一個安全的“傳輸通道”。在不安全的網路通信環境中,它提供了很強的驗證(authentication)機制與非常安全的通信環境。 SSH是由客戶端和服務端的軟件組成的,有兩個不兼容的版本分別是: 1.x和2.x。用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。 SSH提供兩種級別的安全驗證: 一是基於口令的安全驗證。只要用戶知道自己賬號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證用戶正在連接的服務器就是用戶想連接的服務器。可能會有別的服務器在冒充真正的服務器,這存在著潛在的威脅。 二是基於密匙的安全驗證。需要依靠密匙,也就是用戶必須為自己創建一對公匙/密鑰對,並把公用密匙放在需要訪問的服務器上。如果需要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求使用用戶的密匙進行安全驗證。服務器收到請求之後,先在服務器上用戶的主目錄下找到該用戶的公用密匙,然後把它和用戶發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密“質詢”並把它發送給客戶端軟件。客戶端軟件收到“質詢”之後就可以用用戶的私人密匙解密再把它發送給服務器。
安裝與啟動SSH 在Red Hat Linux 7以及其上的發行版本中已經包含了與OpenSSH相關的軟件包,如果沒有,則可以從OpenSSH的主頁下載RPM包自行安裝,OpenSSH的主頁是地址是: www.openssh.com。主要安裝如下幾個包: openssh-3.5p1-6、openssh-server-3.5p1-6、openssh-askpass-gnome-3.5p1-6、openssh-clients-3.5p1-6、openssh-askpass-3.5p1-6。使用如下命令進行安裝: 首先查詢系統是否安裝了上述軟件包。 #rpm -qa grep openssh 如果沒有安裝則執行如下命令。 #rpm -ivh openssh-3.5p1-6 #rpm -ivh openssh-server-3.5p1-6 #rpm -ivh openssh-askpass-gnome-3.5p1-6 #rpm -ivh openssh-clients-3.5p1-6 #rpm -ivh openssh-askpass-3.5p1-6 安裝完成之後,可以使用下述兩個命令中的任一個進行啟動。 #service sshd start #/etc/rc.d/initd/sshd start 另外,如果想在系統啟動時就自動運行該服務,那麼需要使用setup命令,在網絡服務配置的選項中,選中sshd守護進程即可。 安裝啟動完OpenSSH之後,用下面命令測試一下。 ssh -l [username] [address of the remote host] 如果OpenSSH工作正常,將會看到下面的提示信息: The authenticity of host [hostname] can't be established. Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52. Are you sure you want to continue connecting (yes/no)? 在第一次登錄的時候,OpenSSH將會提示用戶它不知道這台登錄的主機,只要鍵入“yes”,就會把這台登錄主機的“識別標記”加到“~/.ssh/know_hosts”文件中。第二次訪問這台主機的時候就不會再顯示這條提示信息了。然後,SSH提示用戶輸入遠程主機上用戶賬號的口令。這樣,就建立了SSH連接,這之後就可以象使用telnet那樣方便地使用SSH了。
SSH的密匙管理 1.生成用戶自己的密匙對 用下面的命令可以生成公鑰/私鑰對: ssh-keygen t 類型。如果遠程主機使用的是SSH 2.x就要用這個命令: ssh-keygen d。在同一台主機上同時有SSH1和SSH2的密匙是沒有問題的,因為密匙是存在不同文件中的。ssh-keygen命令運行之後會顯示下面的信息: # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/.username/ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/.username /.ssh/id_rsa. Your public key has been saved in /home/.username /.ssh/id_rsa.pub. The key fingerprint is: 38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost Generating RSA keys: Key generation complete. “ssh-keygen -d”命令做的是同樣的工作,但是它的一對密匙的保存路徑默認情況下為: /home/[user]/.ssh/id_dsa(私人密匙)和/home/[user]/.ssh/id_dsa.pub(公用密匙)。現在用戶有一對密匙了: 公用密匙要分發到所有用戶想用SSH登錄的遠程主機上去; 私人密匙要好好地保管防止別人知道。用“ls -l ~/.ssh/identity”或“ls -l ~/.ssh/id_dsa”命令所顯示的文件的訪問權限必須是“-rw-------”。 如果用戶懷疑自己的密匙已經被別人知道了,應當馬上生成一對新的密匙。當然,這樣做之後還需要重新分發一次公用密匙,才能正常使用。 2.分發公用密匙 在每一個用戶需要用SSH連接的遠程服務器上,都要在自己的主目錄下創建一個“.ssh”的子目錄,把用戶的公用密匙“identity.pub”拷貝到這個目錄下並把它重命名為“authorized_keys”。然後執行命令: chmod 644 .ssh/authorized_keys 這一步是必不可少的。因為,如果除了用戶之外別人對“authorized_keys”文件也有寫的權限,那麼如果遭到非法的破壞,SSH就不能正常工作。 如果用戶想從不同的計算機登錄到遠程主機,“authorized_ keys”文件也可以有多個公用密匙。在這種情況下,必須在新的計算機上重新生成一對密匙,然後把生成的“identify.pub”文件拷貝並粘貼到遠程主機的“authorized_keys”文件裡。當然,在新的計算機上用戶必須有一個賬號,而且密匙是用口令保護的。有一點很重要,就是當用戶取消了這個賬號之後,必須記住把這一對密匙刪掉。
配置SSH的客戶端 在Linux客戶端下使用SSH,優點是操作更方便,無須其他軟件。但缺點是不太直觀。用戶只需要使用系統提供的默認的配置文件“/etc/ssh/ssh_config”,並且使用如下簡單的命令即可登錄: //以用戶test登錄遠程服務器www.test.com #ssh -l test www.test.com 下面本節主要介紹配置使用Windows環境下的putty工具來登錄SSH服務器。該工具目前使用得相當普遍,可以從網上免費下載。目前網上的最新版本為: putty 0.58,對該版本進行安裝後,進行如下步驟的配置: 1.打開該軟件,進入配置界面,軟件初始自動打開Session窗口。 2.在該界面的右半區域的【Host Name(or IP address)】編輯框中輸入所要遠程登錄的服務器地址,這裡設定為: 192.168.10.1,端口編輯框中輸入默認的端口號22,然後單擊【Save】按鈕,保存輸入配置,如圖1所示。 圖1 配置IP地址及端口號 3.單擊【Open】按鈕,該軟件連接服務器,顯示連接結果,用戶就可以進行相應的遠程管理操作了。
配置SSH的自動登錄 在上面介紹的SSH的使用過程中,用戶每次登錄服務器都需要輸入密碼,這對於用戶來說未免有些麻煩。由於SSH充分使用了密鑰機制,那麼就可以通過一定的系統配置,而達到一次配置,以後都不用輸入密碼,方便登錄的目的,下面以Windows的客戶端為例,說明如何對SSH的自動登錄進行配置。 在Windows下,使用前面介紹的客戶端軟件putty同樣可以方便地實現自動登錄,主要是使用putty工具套件自帶的puttygen工具,來產生公鑰/私鑰對來實現,原理與Linux下相同,下面介紹一下配置細節。 1.打開puttygen工具,准備生成公鑰/私鑰對,如圖2所示,選擇生成SSH2 RSA的密鑰類型。 圖2 PuttygenGenerator主界面 2.單擊【Generate】按鈕,則進入公鑰/私鑰生成界面,用戶需要在界面空白處不斷地移動鼠標,以保證鑰匙生成的隨機性能。 3.成功生成公鑰/私鑰後,系統提示用戶保存公鑰/私鑰對。單擊【Save public key】按鈕以及【Save private key】按鈕,分別指定路徑保存公鑰以及私鑰。 4.使用putty連接上服務器後,將公鑰文件的內容拷貝到服務器的相應主目錄下,用自己的賬號登錄遠程系統,然後執行下面的命令。此時用記事本打開 id_rsa1.pub 文件,選中所有內容,按Ctrl+C復制到剪貼板中,然後在Putty窗口中按Shift+Ins粘貼,再按Ctrl+D鍵,完成文件的創建。這是完成公鑰分發的過程。