- 論壇徽章:
- 0
|
[原創(chuàng)] Openssh中如何配置基于主機的認證?
SSH協(xié)議中主要的幾種認證包括:主機認證,密鑰認證和密碼認證。前兩種認證方式都可以實現(xiàn)對主機的自動登陸(即不需要輸入密碼),但由于密鑰認證主要是用戶級的,而主機認證是系統(tǒng)級的,比較之下密鑰認證安全程度更高一些。在一些相互信任的環(huán)境里,主機認證可以保證從某主機登陸的所有用戶不需要輸入密碼,在某種程度上簡化了認證操作。
以下主要介紹一下在Openssh(版本3.7.1p2)中如何實現(xiàn)主機認證。
在SSH服務器端(假設為服務器A,假設客戶端為服務器B):
1. 在/etc/sshd_config中加上:HostbasedAuthentication yes (取決于ssh的安裝,sshd_config可以位于不同的目錄下,比如/etc/ssh)。
2. 如果服務器使用DNS的話,把SSH客戶端加入A的/etc/hosts中。這是因為當客戶向主機看出認證請求時,會發(fā)過自己的主機名,這通常為短名。但服務器會對客戶的IP地址進行反解析,通過DNS得到的是FQDN名,也就是長名。其后SSHD會對這兩者進行比較以保證客戶機是“無偽裝的”。如果不把客戶機加入/etc/hosts中的話.短名和長名將不匹配,SSHD會認為請求無效,這一點和sendmail服務器有點相似。
3. 把SSH客戶端加入/etc/hosts.equiv中(每一客戶端名占一行),比如
serverb
serverc
4. 重啟SSHD服務器。
在SSH客戶端,也就服務器B上:
1. 同樣在/etc/sshd_config中加上:HostbasedAuthentication yes
2. 找到ssh-keysign這個文件(比如/opt/openssh/libexec下),把它設為setuid。ssh-keysign是用來讀取主機的私鑰和公鑰的,但由于這一對密鑰只允許root讀寫,所以必須把它setuid以保證普通用戶也可以讀出系統(tǒng)密鑰。
chmod u+s ssh-keysign
3. 在/etc/ssh_config中允許使用ssh-keysign:
EnableSSHKeysign yes
4. 在客戶機上產生一對RSA的密鑰:
/opt/openssh/bin/ssh-keygen -t rsa -f /etc/ssh_host_rsa_key -N ""
5. 把客戶機上產生的公鑰(ssh_host_rsa_key.pub)傳到服務器的/etc/ssh_known_hosts里。要特別注意把服務器的公鑰轉化為ssh_known_hosts的格式:
serverb,serverb.domain.com,10.16.xx.128 ssh-rsa AAAAB.....eR=
也就是:服務器B名,服務器B全名,IP地址 ssh-rsa 公鑰
/etc/ssh_known_hosts可以包含多個客戶機,每個客戶機占一行。
下面普通用戶就可以從客戶機B上登陸了服務器A而不需要密碼了:ssh -l user serverA。注意以上方法并不適用于root用戶,由于超級用戶的特殊性,如果要實現(xiàn)root的無密碼登陸的話,還需要做以下幾步:
1. 在服務器A的/etc/sshd_config上,加上:
IgnoreRhosts no
這主要是因為(與BSD的R系列命令相同),/etc/hosts.equiv不能用于root用戶。要配置客戶機的直接登陸,只能在<root home>;/.rhosts或<root home>;/.shosts中設定。所以必須激活SSHD對.shosts的讀取。
2. 在root的宿主目錄下,加上服務器B:echo serverb >;>; ~/.shosts 這樣root用戶也可直接無密碼登陸了。
如果需要進行一些調試的話,可以在A上這樣啟動sshd: sshd -dd,然后在B上這樣啟動ssh: ssh -vv serverA。觀察兩個終端可以得到一些有幫助的信息。 |
|