目前在互聯(lián)網(wǎng)上使用的諸如FTP、Telnet、POP等服務(wù)在本質(zhì)上都是不安全的,它們?cè)诰W(wǎng)絡(luò)上使用明文傳送口令和數(shù)據(jù),黑客非常容易就可以截獲這些口令和數(shù)據(jù),從而破壞數(shù)據(jù)的機(jī)密性和完整性。本文將介紹如何使用Linux下的SSH軟件在不安全的網(wǎng)絡(luò)環(huán)境下通過密碼機(jī)制來保證數(shù)據(jù)傳輸?shù)陌踩?br>
SSH的英文全稱是Secure SHell。通過使用SSH,用戶可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,這樣即使網(wǎng)絡(luò)中的黑客能夠劫持用戶所傳輸?shù)臄?shù)據(jù),如果不能解密的話,也不能對(duì)數(shù)據(jù)傳輸構(gòu)成真正的威脅。另外,傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很多功能,它既可以代替Telnet,又可以為FTP、POP提供一個(gè)安全的“傳輸通道”。在不安全的網(wǎng)路通信環(huán)境中,它提供了很強(qiáng)的驗(yàn)證(authentication)機(jī)制與非常安全的通信環(huán)境。 SSH是由客戶端和服務(wù)端的軟件組成的,有兩個(gè)不兼容的版本分別是: 1.x和2.x。用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務(wù)程序上去的。OpenSSH 2.x同時(shí)支持SSH 1.x和2.x。 SSH提供兩種級(jí)別的安全驗(yàn)證: 一是基于口令的安全驗(yàn)證。只要用戶知道自己賬號(hào)和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都會(huì)被加密,但是不能保證用戶正在連接的服務(wù)器就是用戶想連接的服務(wù)器??赡軙?huì)有別的服務(wù)器在冒充真正的服務(wù)器,這存在著潛在的威脅。 二是基于密匙的安全驗(yàn)證。需要依靠密匙,也就是用戶必須為自己創(chuàng)建一對(duì)公匙/密鑰對(duì),并把公用密匙放在需要訪問的服務(wù)器上。如果需要連接到SSH服務(wù)器上,客戶端軟件就會(huì)向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求使用用戶的密匙進(jìn)行安全驗(yàn)證。服務(wù)器收到請(qǐng)求之后,先在服務(wù)器上用戶的主目錄下找到該用戶的公用密匙,然后把它和用戶發(fā)送過來的公用密匙進(jìn)行比較。如果兩個(gè)密匙一致,服務(wù)器就用公用密匙加密“質(zhì)詢”并把它發(fā)送給客戶端軟件??蛻舳塑浖盏?#8220;質(zhì)詢”之后就可以用用戶的私人密匙解密再把它發(fā)送給服務(wù)器。 安裝與啟動(dòng)SSH 在Red Hat Linux 7以及其上的發(fā)行版本中已經(jīng)包含了與OpenSSH相關(guān)的軟件包,如果沒有,則可以從OpenSSH的主頁(yè)下載RPM包自行安裝,OpenSSH的主頁(yè)是地址是: [url]www.openssh.com[/url]。主要安裝如下幾個(gè)包: 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。使用如下命令進(jìn)行安裝: 首先查詢系統(tǒng)是否安裝了上述軟件包。 #rpm -qa |grep openssh 如果沒有安裝則執(zhí)行如下命令。 #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 安裝完成之后,可以使用下述兩個(gè)命令中的任一個(gè)進(jìn)行啟動(dòng)。 #service sshd start #/etc/rc.d/initd/sshd start 另外,如果想在系統(tǒng)啟動(dòng)時(shí)就自動(dòng)運(yùn)行該服務(wù),那么需要使用setup命令,在網(wǎng)絡(luò)服務(wù)配置的選項(xiàng)中,選中sshd守護(hù)進(jìn)程即可。 安裝啟動(dòng)完OpenSSH之后,用下面命令測(cè)試一下。 ssh -l [username] [address of the remote host] 如果OpenSSH工作正常,將會(huì)看到下面的提示信息: 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)? 在第一次登錄的時(shí)候,OpenSSH將會(huì)提示用戶它不知道這臺(tái)登錄的主機(jī),只要鍵入“yes”,就會(huì)把這臺(tái)登錄主機(jī)的“識(shí)別標(biāo)記”加到“~/.ssh/know_hosts”文件中。第二次訪問這臺(tái)主機(jī)的時(shí)候就不會(huì)再顯示這條提示信息了。然后,SSH提示用戶輸入遠(yuǎn)程主機(jī)上用戶賬號(hào)的口令。這樣,就建立了SSH連接,這之后就可以象使用telnet那樣方便地使用SSH了。 SSH的密匙管理 1.生成用戶自己的密匙對(duì) 用下面的命令可以生成公鑰/私鑰對(duì): ssh-keygen t 類型。如果遠(yuǎn)程主機(jī)使用的是SSH 2.x就要用這個(gè)命令: ssh-keygen d。在同一臺(tái)主機(jī)上同時(shí)有SSH1和SSH2的密匙是沒有問題的,因?yàn)槊艹资谴嬖诓煌募械?。ssh-keygen命令運(yùn)行之后會(huì)顯示下面的信息: # 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”命令做的是同樣的工作,但是它的一對(duì)密匙的保存路徑默認(rèn)情況下為: /home/[user]/.ssh/id_dsa(私人密匙)和/home/[user]/.ssh/id_dsa.pub(公用密匙)?,F(xiàn)在用戶有一對(duì)密匙了: 公用密匙要分發(fā)到所有用戶想用SSH登錄的遠(yuǎn)程主機(jī)上去; 私人密匙要好好地保管防止別人知道。用“ls -l ~/.ssh/identity”或“ls -l ~/.ssh/id_dsa”命令所顯示的文件的訪問權(quán)限必須是“-rw-------”。 如果用戶懷疑自己的密匙已經(jīng)被別人知道了,應(yīng)當(dāng)馬上生成一對(duì)新的密匙。當(dāng)然,這樣做之后還需要重新分發(fā)一次公用密匙,才能正常使用。 2.分發(fā)公用密匙 在每一個(gè)用戶需要用SSH連接的遠(yuǎn)程服務(wù)器上,都要在自己的主目錄下創(chuàng)建一個(gè)“.ssh”的子目錄,把用戶的公用密匙“identity.pub”拷貝到這個(gè)目錄下并把它重命名為“authorized_keys”。然后執(zhí)行命令: chmod 644 .ssh/authorized_keys 這一步是必不可少的。因?yàn)?,如果除了用戶之外別人對(duì)“authorized_keys”文件也有寫的權(quán)限,那么如果遭到非法的破壞,SSH就不能正常工作。 如果用戶想從不同的計(jì)算機(jī)登錄到遠(yuǎn)程主機(jī),“authorized_ keys”文件也可以有多個(gè)公用密匙。在這種情況下,必須在新的計(jì)算機(jī)上重新生成一對(duì)密匙,然后把生成的“identify.pub”文件拷貝并粘貼到遠(yuǎn)程主機(jī)的“authorized_keys”文件里。當(dāng)然,在新的計(jì)算機(jī)上用戶必須有一個(gè)賬號(hào),而且密匙是用口令保護(hù)的。有一點(diǎn)很重要,就是當(dāng)用戶取消了這個(gè)賬號(hào)之后,必須記住把這一對(duì)密匙刪掉。 配置SSH的客戶端 在Linux客戶端下使用SSH,優(yōu)點(diǎn)是操作更方便,無須其他軟件。但缺點(diǎn)是不太直觀。用戶只需要使用系統(tǒng)提供的默認(rèn)的配置文件“/etc/ssh/ssh_config”,并且使用如下簡(jiǎn)單的命令即可登錄: //以用戶test登錄遠(yuǎn)程服務(wù)器www. #ssh -l test www. 下面本節(jié)主要介紹配置使用Windows環(huán)境下的putty工具來登錄SSH服務(wù)器。該工具目前使用得相當(dāng)普遍,可以從網(wǎng)上免費(fèi)下載。目前網(wǎng)上的最新版本為: putty 0.58,對(duì)該版本進(jìn)行安裝后,進(jìn)行如下步驟的配置: 1.打開該軟件,進(jìn)入配置界面,軟件初始自動(dòng)打開Session窗口。 2.在該界面的右半?yún)^(qū)域的【Host Name(or IP address)】編輯框中輸入所要遠(yuǎn)程登錄的服務(wù)器地址,這里設(shè)定為: 192.168.10.1,端口編輯框中輸入默認(rèn)的端口號(hào)22,然后單擊【Save】按鈕,保存輸入配置,如圖1所示。 [attach]9636[/attach] 3.單擊【Open】按鈕,該軟件連接服務(wù)器,顯示連接結(jié)果,用戶就可以進(jìn)行相應(yīng)的遠(yuǎn)程管理操作了。 配置SSH的自動(dòng)登錄 在上面介紹的SSH的使用過程中,用戶每次登錄服務(wù)器都需要輸入密碼,這對(duì)于用戶來說未免有些麻煩。由于SSH充分使用了密鑰機(jī)制,那么就可以通過一定的系統(tǒng)配置,而達(dá)到一次配置,以后都不用輸入密碼,方便登錄的目的,下面以Windows的客戶端為例,說明如何對(duì)SSH的自動(dòng)登錄進(jìn)行配置。 在Windows下,使用前面介紹的客戶端軟件putty同樣可以方便地實(shí)現(xiàn)自動(dòng)登錄,主要是使用putty工具套件自帶的puttygen工具,來產(chǎn)生公鑰/私鑰對(duì)來實(shí)現(xiàn),原理與Linux下相同,下面介紹一下配置細(xì)節(jié)。 1.打開puttygen工具,準(zhǔn)備生成公鑰/私鑰對(duì),如圖2所示,選擇生成SSH2 RSA的密鑰類型。 [attach]9637[/attach] 2.單擊【Generate】按鈕,則進(jìn)入公鑰/私鑰生成界面,用戶需要在界面空白處不斷地移動(dòng)鼠標(biāo),以保證鑰匙生成的隨機(jī)性能。 3.成功生成公鑰/私鑰后,系統(tǒng)提示用戶保存公鑰/私鑰對(duì)。單擊【Save public key】按鈕以及【Save private key】按鈕,分別指定路徑保存公鑰以及私鑰。 4.使用putty連接上服務(wù)器后,將公鑰文件的內(nèi)容拷貝到服務(wù)器的相應(yīng)主目錄下,用自己的賬號(hào)登錄遠(yuǎn)程系統(tǒng),然后執(zhí)行下面的命令。此時(shí)用記事本打開 id_rsa1.pub 文件,選中所有內(nèi)容,按Ctrl+C復(fù)制到剪貼板中,然后在Putty窗口中按Shift+Ins粘貼,再按Ctrl+D鍵,完成文件的創(chuàng)建。這是完成公鑰分發(fā)的過程。 使用 scp 命令 scp 命令可以用來通過安全、加密的連接在機(jī)器間傳輸文件。它與 rcp 相似。 把本地文件傳輸給遠(yuǎn)程系統(tǒng)的一般語(yǔ)法是: scp localfile username@tohostname:/newfilename localfile 指定源文件,username@tohostname:/newfilename 指定目標(biāo)文件。 要把本地文件 shadowman 傳送到你在 penguin.example.net 上的賬號(hào)內(nèi),在 shell 提示下鍵入(把 username 替換成你的用戶名): scp shadowman [email]username@penguin.example.net[/email]:/home/username 這會(huì)把本地文件 shadowman 傳輸給 penguin.example.net 上的 /home/username/shadowman 文件。 把遠(yuǎn)程文件傳輸給本地系統(tǒng)的一般語(yǔ)法是: scp username@tohostname:/remotefile /newlocalfile remotefile 指定源文件,newlocalfile 指定目標(biāo)文件。 源文件可以由多個(gè)文件組成。譬如,要把目錄 /downloads 的內(nèi)容傳輸?shù)竭h(yuǎn)程機(jī)器 penguin.example.net 上現(xiàn)存的 uploads 目錄,在 shell 提示下鍵入下列命令: scp /downloads/* [email]username@penguin.example.net[/email]:/uploads/ 使用 sftp 命令 sftp 工具可以用來打開一次安全互動(dòng)的 FTP 會(huì)話。它與 ftp 相似, 只不過,它使用安全、加密的連接。它的一般語(yǔ)法是:sftp [email]username@hostname.com[/email]。一旦通過 驗(yàn)證,你可以使用一組和使用 FTP 相似的命令。請(qǐng)參閱 sftp 的說明書頁(yè)(man)來獲取這些 命令的列表。要閱讀說明書頁(yè),在 shell 提示下執(zhí)行 man sftp 命令。sftp 工具只在 OpenSSH 版本 2.5.0p1 以上才有。 [/quote] windows 下可以通過SSH Secure File Transfer Client,很方便的向Linux /Unix 傳送文件,就像FTP 一樣方便。 |
|