從客戶(hù)端來(lái)看,SSH提供兩種級(jí)別的安全驗(yàn)證。
第一種級(jí)別(基于口令的安全驗(yàn)證)只要你知道自己帳號(hào)和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都會(huì)被加密,但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器。可能會(huì)有別的服務(wù)器在冒充真正的服務(wù)器,也就是受到"中間人"這種方式的攻擊。
第二種級(jí)別(基于密匙的安全驗(yàn)證)需要依靠密匙,也就是你必須為自己創(chuàng)建一對(duì)密匙,并把公用密匙放在需要訪(fǎng)問(wèn)的服務(wù)器上。如果你要連接到SSH服務(wù)器上, 客戶(hù)端軟件就會(huì)向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求用你的密匙進(jìn)行安全驗(yàn)證。服務(wù)器收到請(qǐng)求之后,先在你在該服務(wù)器的家目錄下尋找你的公用密匙,然后把它和你發(fā)送過(guò)來(lái) 的公用密匙進(jìn)行比較。如果兩個(gè)密匙一致,服務(wù)器就用公用密匙加密"質(zhì)詢(xún)"(challenge)并把它發(fā)送給客戶(hù)端軟件??蛻?hù)端軟件收到"質(zhì)詢(xún)"之后就可 以用你的私人密匙解密再把它發(fā)送給服務(wù)器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級(jí)別相比,第二種級(jí)別不需要在網(wǎng)絡(luò)上傳送口令。
第二種級(jí)別不僅加密所有傳送的數(shù)據(jù),而且"中間人"這種攻擊方式也是不可能的(因?yàn)樗麤](méi)有你的私人密匙)。但是整個(gè)登錄的過(guò)程可能需要10秒。
安裝并測(cè)試OpenSSH
因?yàn)槭艿矫绹?guó)法律的限制,在很多Linux的發(fā)行版中都沒(méi)有包括OpenSSH。但是,可以從網(wǎng)絡(luò)上下載并安裝OpenSSH(有關(guān)OpenSSH的安裝 和配置請(qǐng)參考:http://www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm)。
安裝完OpenSSH之后,用下面命令測(cè)試一下:
ssh -l [your accountname on the remote host] [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)?
OpenSSH告訴你它不知道這臺(tái)主機(jī),但是你不用擔(dān)心這個(gè)問(wèn)題,因?yàn)槟闶堑谝淮蔚卿涍@臺(tái)主機(jī)。鍵入"yes"。這將把這臺(tái)主機(jī)的"識(shí)別標(biāo)記"加到"~/.ssh/know_hosts"文件中。第二次訪(fǎng)問(wèn)這臺(tái)主機(jī)的時(shí)候就不會(huì)再顯示這條提示信息了。
然后,SSH提示你輸入遠(yuǎn)程主機(jī)上你的帳號(hào)的口令。輸入完口令之后,就建立了SSH連接,這之后就可以象使用telnet那樣使用SSH了。
SSH的密匙
生成你自己的密匙對(duì)
生成并分發(fā)你自己的密匙有兩個(gè)好處:
1) 可以防止"中間人"這種攻擊方式
2) 可以只用一個(gè)口令就登錄到所有你想登錄的服務(wù)器上
用下面的命令可以生成密匙:
ssh-keygen
如果遠(yuǎn)程主機(jī)使用的是SSH 2.x就要用這個(gè)命令:
ssh-keygen -d
在同一臺(tái)主機(jī)上同時(shí)有SSH1和SSH2的密匙是沒(méi)有問(wèn)題的,因?yàn)槊艹资谴娉刹煌奈募摹?br />
ssh-keygen命令運(yùn)行之后會(huì)顯示下面的信息:
Generating RSA keys: ............................ooooooO......ooooooO
Key generation complete.
Enter file in which to save the key (/home/[user]/.ssh/identity):
[按下ENTER就行了]
Created directory '/home/[user]/.ssh'.
Enter passphrase (empty for no passphrase):
[輸入的口令不會(huì)顯示在屏幕上]
Enter same passphrase again:
[重新輸入一遍口令,如果忘記了口令就只能重新生成一次密匙了]
Your identification has been saved in /home/[user]/.ssh/identity.
[這是你的私人密匙]
Your public key has been saved in /home/[user]/.ssh/identity.pub.
The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine]
"ssh-keygen -d"做的是幾乎同樣的事,但是把一對(duì)密匙存為(默認(rèn)情況下)"/home/[user]/.ssh/id_dsa"(私人密匙)和"/home/[user]/.ssh/id_dsa.pub"(公用密匙)。
現(xiàn)在你有一對(duì)密匙了:公用密匙要分發(fā)到所有你想用ssh登錄的遠(yuǎn)程主機(jī)上去;私人密匙要好好地保管防止別人知道你的私人密匙。用"ls -l ~/.ssh/identity"或"ls -l ~/.ssh/id_dsa"所顯示的文件的訪(fǎng)問(wèn)權(quán)限必須是"-rw-------"。
如果你懷疑自己的密匙已經(jīng)被別人知道了,不要遲疑馬上生成一對(duì)新的密匙。當(dāng)然,你還要重新分發(fā)一次公用密匙。
分發(fā)公用密匙
在每一個(gè)你需要用SSH連接的遠(yuǎn)程服務(wù)器上,你要在自己的家目錄下創(chuàng)建一個(gè)".ssh"的子目錄,把你的公用密匙"identity.pub" 拷貝到這個(gè)目錄下并把它重命名為"authorized_keys"。然后執(zhí)行:
chmod 644 .ssh/authorized_keys
這一步是必不可少的。如果除了你之外別人對(duì)"authorized_keys"文件也有寫(xiě)的權(quán)限,SSH就不會(huì)工作。
如果你想從不同的計(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ì)密匙刪掉。
原文地址:http://fly-net-cn.iteye.com/blog/119301