從客戶端來看,SSH提供兩種級別的安全驗證。
第一種級別(基于口令的安全驗證)只要你知道自己帳號和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都會被加密,但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器。可能會有別的服務(wù)器在冒充真正的服務(wù)器,也就是受到"中間人"這種方式的攻擊。
第二種級別(基于密匙的安全驗證)需要依靠密匙,也就是你必須為自己創(chuàng)建一對密匙,并把公用密匙放在需要訪問的服務(wù)器上。如果你要連接到SSH服務(wù)器上, 客戶端軟件就會向服務(wù)器發(fā)出請求,請求用你的密匙進(jìn)行安全驗證。服務(wù)器收到請求之后,先在你在該服務(wù)器的家目錄下尋找你的公用密匙,然后把它和你發(fā)送過來 的公用密匙進(jìn)行比較。如果兩個密匙一致,服務(wù)器就用公用密匙加密"質(zhì)詢"(challenge)并把它發(fā)送給客戶端軟件。客戶端軟件收到"質(zhì)詢"之后就可 以用你的私人密匙解密再把它發(fā)送給服務(wù)器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網(wǎng)絡(luò)上傳送口令。
第二種級別不僅加密所有傳送的數(shù)據(jù),而且"中間人"這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒。
安裝并測試OpenSSH
因為受到美國法律的限制,在很多Linux的發(fā)行版中都沒有包括OpenSSH。但是,可以從網(wǎng)絡(luò)上下載并安裝OpenSSH(有關(guān)OpenSSH的安裝 和配置請參考:http://www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm)。
安裝完OpenSSH之后,用下面命令測試一下:
ssh -l [your accountname on the remote host] [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告訴你它不知道這臺主機(jī),但是你不用擔(dān)心這個問題,因為你是第一次登錄這臺主機(jī)。鍵入"yes"。這將把這臺主機(jī)的"識別標(biāo)記"加到"~/.ssh/know_hosts"文件中。第二次訪問這臺主機(jī)的時候就不會再顯示這條提示信息了。
然后,SSH提示你輸入遠(yuǎn)程主機(jī)上你的帳號的口令。輸入完口令之后,就建立了SSH連接,這之后就可以象使用telnet那樣使用SSH了。
SSH的密匙
生成你自己的密匙對
生成并分發(fā)你自己的密匙有兩個好處:
1) 可以防止"中間人"這種攻擊方式
2) 可以只用一個口令就登錄到所有你想登錄的服務(wù)器上
用下面的命令可以生成密匙:
ssh-keygen
如果遠(yuǎn)程主機(jī)使用的是SSH 2.x就要用這個命令:
ssh-keygen -d
在同一臺主機(jī)上同時有SSH1和SSH2的密匙是沒有問題的,因為密匙是存成不同的文件的。
ssh-keygen命令運行之后會顯示下面的信息:
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):
[輸入的口令不會顯示在屏幕上]
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"做的是幾乎同樣的事,但是把一對密匙存為(默認(rèn)情況下)"/home/[user]/.ssh/id_dsa"(私人密匙)和"/home/[user]/.ssh/id_dsa.pub"(公用密匙)。
現(xiàn)在你有一對密匙了:公用密匙要分發(fā)到所有你想用ssh登錄的遠(yuǎn)程主機(jī)上去;私人密匙要好好地保管防止別人知道你的私人密匙。用"ls -l ~/.ssh/identity"或"ls -l ~/.ssh/id_dsa"所顯示的文件的訪問權(quán)限必須是"-rw-------"。
如果你懷疑自己的密匙已經(jīng)被別人知道了,不要遲疑馬上生成一對新的密匙。當(dāng)然,你還要重新分發(fā)一次公用密匙。
分發(fā)公用密匙
在每一個你需要用SSH連接的遠(yuǎn)程服務(wù)器上,你要在自己的家目錄下創(chuàng)建一個".ssh"的子目錄,把你的公用密匙"identity.pub" 拷貝到這個目錄下并把它重命名為"authorized_keys"。然后執(zhí)行:
chmod 644 .ssh/authorized_keys
這一步是必不可少的。如果除了你之外別人對"authorized_keys"文件也有寫的權(quán)限,SSH就不會工作。
第一種級別(基于口令的安全驗證)只要你知道自己帳號和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都會被加密,但是不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器。可能會有別的服務(wù)器在冒充真正的服務(wù)器,也就是受到"中間人"這種方式的攻擊。
第二種級別(基于密匙的安全驗證)需要依靠密匙,也就是你必須為自己創(chuàng)建一對密匙,并把公用密匙放在需要訪問的服務(wù)器上。如果你要連接到SSH服務(wù)器上, 客戶端軟件就會向服務(wù)器發(fā)出請求,請求用你的密匙進(jìn)行安全驗證。服務(wù)器收到請求之后,先在你在該服務(wù)器的家目錄下尋找你的公用密匙,然后把它和你發(fā)送過來 的公用密匙進(jìn)行比較。如果兩個密匙一致,服務(wù)器就用公用密匙加密"質(zhì)詢"(challenge)并把它發(fā)送給客戶端軟件。客戶端軟件收到"質(zhì)詢"之后就可 以用你的私人密匙解密再把它發(fā)送給服務(wù)器。
用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網(wǎng)絡(luò)上傳送口令。
第二種級別不僅加密所有傳送的數(shù)據(jù),而且"中間人"這種攻擊方式也是不可能的(因為他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒。
安裝并測試OpenSSH
因為受到美國法律的限制,在很多Linux的發(fā)行版中都沒有包括OpenSSH。但是,可以從網(wǎng)絡(luò)上下載并安裝OpenSSH(有關(guān)OpenSSH的安裝 和配置請參考:http://www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm)。
安裝完OpenSSH之后,用下面命令測試一下:
ssh -l [your accountname on the remote host] [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告訴你它不知道這臺主機(jī),但是你不用擔(dān)心這個問題,因為你是第一次登錄這臺主機(jī)。鍵入"yes"。這將把這臺主機(jī)的"識別標(biāo)記"加到"~/.ssh/know_hosts"文件中。第二次訪問這臺主機(jī)的時候就不會再顯示這條提示信息了。
然后,SSH提示你輸入遠(yuǎn)程主機(jī)上你的帳號的口令。輸入完口令之后,就建立了SSH連接,這之后就可以象使用telnet那樣使用SSH了。
SSH的密匙
生成你自己的密匙對
生成并分發(fā)你自己的密匙有兩個好處:
1) 可以防止"中間人"這種攻擊方式
2) 可以只用一個口令就登錄到所有你想登錄的服務(wù)器上
用下面的命令可以生成密匙:
ssh-keygen
如果遠(yuǎn)程主機(jī)使用的是SSH 2.x就要用這個命令:
ssh-keygen -d
在同一臺主機(jī)上同時有SSH1和SSH2的密匙是沒有問題的,因為密匙是存成不同的文件的。
ssh-keygen命令運行之后會顯示下面的信息:
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):
[輸入的口令不會顯示在屏幕上]
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"做的是幾乎同樣的事,但是把一對密匙存為(默認(rèn)情況下)"/home/[user]/.ssh/id_dsa"(私人密匙)和"/home/[user]/.ssh/id_dsa.pub"(公用密匙)。
現(xiàn)在你有一對密匙了:公用密匙要分發(fā)到所有你想用ssh登錄的遠(yuǎn)程主機(jī)上去;私人密匙要好好地保管防止別人知道你的私人密匙。用"ls -l ~/.ssh/identity"或"ls -l ~/.ssh/id_dsa"所顯示的文件的訪問權(quán)限必須是"-rw-------"。
如果你懷疑自己的密匙已經(jīng)被別人知道了,不要遲疑馬上生成一對新的密匙。當(dāng)然,你還要重新分發(fā)一次公用密匙。
分發(fā)公用密匙
在每一個你需要用SSH連接的遠(yuǎn)程服務(wù)器上,你要在自己的家目錄下創(chuàng)建一個".ssh"的子目錄,把你的公用密匙"identity.pub" 拷貝到這個目錄下并把它重命名為"authorized_keys"。然后執(zhí)行:
chmod 644 .ssh/authorized_keys
這一步是必不可少的。如果除了你之外別人對"authorized_keys"文件也有寫的權(quán)限,SSH就不會工作。
如果你想從不同的計算機(jī)登錄到遠(yuǎn)程主機(jī),"authorized_keys"文件也可以有多個公用密匙。在這種情況下,必須在新的計算機(jī)上重新生成一對密 匙,然后把生成的"identify.pub"文件拷貝并粘貼到遠(yuǎn)程主機(jī)的"authorized_keys"文件里。當(dāng)然在新的計算機(jī)上你必須有一個帳 號,而且密匙是用口令保護(hù)的。有一點很重要,就是當(dāng)你取消了這個帳號之后,別忘了把這一對密匙刪掉。
原文地址:http://fly-net-cn.iteye.com/blog/119301

