以下針對的是openssh,而不是ssh,也不是ssh2。配置分兩部分:一是對登入機的配置,二是對被登入機的配置,其中登入機為用戶端,被登入機為服務端,也就是解決用戶端到服務端的無密碼登入問題。下述涉及到的指令,可以直接拷貝到Linux終端上執行,已全部驗證通過,操作環境為CentOS Linux release 7.0。
如何确定是OpenSSH還是SSH2?執行指令“ssh -V”,通過它的輸出,即可确定:
SSH2
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on
OpenSSH
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
本文假設被登入的遠端機器名為hadoop-138-24,對應的IP為192.168.138.24,使用的使用者名為hadoop。
第一步,修改所有被登入機上的sshd配置檔案/etc/ssh/sshd_config:
1) 将PermitRootLogin值設定為yes,也就是取掉前面的注釋号#(如果不是配置root無密碼登入,跳過這一步)
2) 以下幾行注釋取消:
#RSAAuthentication=yes
#PubkeyAuthentication=yes
#AuthorizedKeysFile=.ssh/authorized_keys
PubkeyAuthentication僅針對ssh2,預設為yes,是以可不取消注釋。
RSAAuthentication僅針對ssh1,預設為yes,是以可不取消注釋。
AuthorizedKeysFile預設為.ssh/authorized_keys,是以也可不取消注釋。
可以通過“man sshd_config”了解到更多資訊。
檢視OpenSSH的版本:
# sshd -V
unknown option -- V
OpenSSH_6.4p1, OpenSSL 1.0.1e-fips 11 Feb 2013
3) 重新開機sshd服務:service sshd restart
手工啟動方式:
/usr/sbin/sshd -o pidFile=/var/run/sshd_56000.pid -f /etc/ssh/sshd_config.l
或者:
/usr/sbin/sshd -D -f /etc/ssh/sshd_config.l
參數“-D”表示sshd程序不成為守護程序。
如果不指定參數“-o”,則預設為/var/run/sshd.pid,存儲了sshd守護程序的pid。
/etc/ssh/sshd_config檔案中的Protocol配置項指定sshd支援的協定版本,如:
“Protocol 2”表示為ssh2,多版本使用逗号分隔(無順序要求):Protocol 1,2或Protocol 2,1。
對于OpenSSH_5.3p1預設值為2,1。對于OpenSSH_6.4p1預設值為2。
第二步,在所有登入機上,執行以下步驟:
1) 進入到使用者HOME目錄下的.ssh子目錄:cd ~/.ssh
2) 生成私鑰和公鑰檔案:ssh-keygen -t rsa
出現提示後,一路直接回車。成功之後,會在使用者的主目錄(HOME目錄)下生成私鑰檔案id_rsa,和公鑰檔案id_rsa.pub。
3) 運作ssh-copy-id,将公鑰檔案id_rsa.pub上傳到遠端被登入的機器:
ssh-copy-id -i id_rsa.pub hadoop@hadoop-138-24
注意,這裡沒有指定遠端機器的目錄,ssh-copy-id指令會自動将id_rsa.pub的内容放到遠端機器的hadoop使用者的主目錄的.ssh子目錄的authorized_keys檔案尾。
如果沒有ssh-copy-id指令,則可以使用scp複制過去,手工追加到authorized_keys檔案尾,如:scp id_rsa.pub hadoop@hadoop-138-24:/data/hadoop/.ssh(這裡假設hadoop使用者的HOME目錄為/data/hadoop),然後登入hadoop-138-24,進入/data/hadoop/.ssh,執行:
cat id_rsa.pub >> authorized_keys
接下來,就可以無密碼登入遠端機器:ssh hadoop@hadoop-138-24。當然也可以以IP方式登入,如:ssh [email protected]。
如果按上述操作的之後,仍然不能免密碼登入,則檢查目錄.ssh的權限,如同下面這樣:
drwxrwxr-x 2 hadoop hadoop 4096 Nov 24 14:27 .ssh
則是登入時仍然需要密碼,需要去掉其他使用者對.ssh目錄的寫權限:
drwx------ 2 hadoop hadoop 4096 Nov 24 14:27 .ssh
對被登入機器上的檔案authorized_keys也有同樣的要求,下面這樣是OK的:
-rw------- 1 hadoop hadoop 403 Nov 24 14:27 authorized_keys
相關參考: