您好,登錄后才能下訂單哦!
如果我們希望從localhost主機通過SSH登錄remotehost主機,執(zhí)行如下命令:
ssh username@centos-i1
這是 ssh
處理認證的缺省方式,它會要求我們輸入username的密碼,如果我們輸入密碼,ssh
就會用安全密碼認證協(xié)議,把我們的密碼傳送給 remotehost進行驗證。但是,和 telnet
的情況不同,這里我們的密碼是加密的,因此它不會被偷看到我們的數(shù)據(jù)連接的人截取。一旦 remotehost把我們提供的密碼同它的密碼數(shù)據(jù)庫相對照進行認證,成功的話,我們就會被允許登錄。
為了使用這種認證方式,我們首先得生成一對密鑰:一把專用密鑰和一把公用密鑰。公用密鑰用于對消息進行加密,只有擁有專用密鑰的人才能對該消息進行解密。公用密鑰只能用于加密,而專用密鑰只能用于對由匹配的公用密鑰編碼的消息進行解密。RSA(和 DSA)認證協(xié)議利用密鑰對的這些特殊性質(zhì)進行安全認證,并且不需要在網(wǎng)上傳輸任何保密的信息。
然后把公用密鑰拷貝到 remotehost。公用密鑰之所以被稱作是“公用的”有一個原因是因為它只能用于對那些給我們的消息進行加密,所以我們不需要太擔心它會落入其它人手中。一旦我們的公用密鑰已經(jīng)被拷貝到 remotehost 中,并且為了讓remotehost 的 sshd 能夠定位它而把它放在一個專門的文件(~/.ssh/authorized_keys)里,我們就為使用 RSA 認證登錄到 remotehost 上做好了準備。
要用 RSA 登錄的時候,就象我們常做的一樣,我們只要在 localhost 的控制臺鍵入ssh username@centos-i1。但是這一次,ssh 告訴 remotehost 的 sshd 它想使用 RSA 或DSA認證協(xié)議。Remotehost 的 sshd 會生成一個隨機數(shù),并用我們先前拷貝過去的公用密鑰對這個隨機數(shù)進行加密。然后, sshd 把加密了的隨機數(shù)發(fā)回給正在 localhost 上運行的 ssh。接下來,輪到localhost的 ssh 用專用密鑰對這個隨機數(shù)進行解密后,再把它發(fā)回給 remotehost,實際上等于在說:“瞧,我確實有匹配的專用密鑰;我能成功的對您的消息進行解密!”。這樣remotehost的 sshd 得出結(jié)論,既然我們持有匹配的專用密鑰,就應(yīng)當允許我們登錄。
關(guān)于 RSA 和 DSA 認證有兩項重要的注意事項。
我們的確只需要生成一對密鑰。然后我們可以把我們的公用密鑰拷貝到想要訪問的那些遠程機器上,并進行恰當?shù)恼J證配置。換句話說,我們并不需要為想要訪問的每個系統(tǒng)都準備一對密鑰。只要一對就足夠了。
專用密鑰不應(yīng)落入其它人手中。正是專用密鑰授權(quán)我們訪問遠程系統(tǒng),任何擁有我們的專用密鑰的人都會被授予和我們完全相同的特權(quán)。我們應(yīng)該保護我們的專用密鑰以防未授權(quán)的使用。
ssh 的開發(fā)者們當然知道專用密鑰的重要性,而且他們已經(jīng)在 ssh 和 ssh-keygen 里加入了一些防范措施,以防止我們的專用密鑰被濫用。首先,ssh 被設(shè)置成了如果我們的密鑰的文件權(quán)限允許除我們之外的任何人讀取密鑰,就打印出一條大大的警告消息。其次,在我們用 ssh-keygen 創(chuàng)建公用/專用密鑰對的時候,ssh-keygen 會要求我們輸入一個密碼短語。如果我們輸入了密碼短語,ssh-keygen 就會用該密碼短語加密我們的專用密鑰,這樣,即使專用密鑰被盜,對于那些碰巧不知道密碼短語的人而言,這把專用密鑰是毫無用處的。
以主機centos-i2免密碼登錄centos-i1為例。
1.在主機centos-i2生成公私密鑰
[root@centos-i2 ~]# ssh-keygen #缺省使用RSA協(xié)議,也可以通過-t dsa參數(shù)來使用DSA協(xié)議
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): #此處直接回車
Enter same passphrase again:
Your identification has been saved in/root/.ssh/id_rsa.
Your public key has been saved in/root/.ssh/id_rsa.pub.
The key fingerprint is:
33:3e:b4:b5:bb:76:e3:6d:c9:2a:53:93:24:31:0b:40root@centos-i2
這樣就會如程序提示在/home/.ssh目錄生成兩個文件,分別是公私密鑰。
2.把生成的公鑰文件id_rsa.pub復(fù)制到centos-i1主機上
[root@ce[root@centos-i2 .ssh]# scpid_rsa.pub root@centos-i1:/root/.ssh
root@centos-i1's password: #此時免密碼設(shè)置還沒有配好,所以需要密碼
id_rsa.pub 100% 396 0.4KB/s 00:00
3.在centos-i1主機上配置centos-i2的公鑰
[root@centos-i1 .ssh]# cat id_rsa.pub>> authorized_keys
上述3步驟配置完成后,就可以通過ssh和scp命令在centos-i2上免密碼ssh登錄centos-i1了。示例如下:
[root@centos-i2 .ssh]# ssh root@centos-i1
[root@centos-i2 lb]# scp fio-2.2.10.tar.gzroot@centos-i1:/home/lb
但是,由于步驟一中我們沒有使用密碼短語來保護私鑰,如果私鑰被不恰當使用,可能會帶來風險。為了避免由此帶來的隱患,可以使用ssh-agent。關(guān)于ssh-agent的使用方法,可以看參考文獻。
ssh
協(xié)議的版本 1 使用的是 RSA 密鑰,而 DSA 密鑰卻用于協(xié)議級 2,這是 ssh
協(xié)議的最新版本。目前所有的 OpenSSH 版本都應(yīng)該既能使用 RSA 密鑰又能使用 DSA 密鑰。DSA 密鑰以如下類似于 RSA 密鑰的方式使用 OpenSSH 的 ssh-keygen
生成:
% ssh-keygen -t dsa
又會提示我們輸入密碼短語。輸入一個安全的密碼短語。還會提示我們輸入保存 DSA 密鑰的位置。正常情況下,缺省的 ~/.ssh/id_dsa 和~/.ssh/id_dsa.pub 就可以了。在我們一次性生成 DSA 密鑰完成后,就該把我們的 DSA 公用密鑰安裝到遠程系統(tǒng)上去了。
DSA 公用密鑰的安裝又是幾乎和 RSA 安裝完全一樣。對于 DSA,我們將要把 ~/.ssh/id_dsa.pub 文件拷貝到 remotehost,然后把它附加到remotehost 上的~/.ssh/authorized_keys2 文件。請注意這個文件的名字和 RSA 的 authorized_keys 文件名不同。一旦配置完畢,輸入我們的 DSA 專用密鑰的密碼短語就應(yīng)該能登錄到 remotehost,而不需要我們輸入在 remotehost 上真正的密碼。
參考文獻
https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/index.html
https://www.ibm.com/developerworks/cn/linux/security/openssh/part2/
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。