本文配置可實現:集群伺服器之間相互可以ssh免密登錄。若只想從單一機器(如master)ssh免密登錄其他機器(slave1、slave2),則只跟著操作到第二步即可。 建議先花兩三分鐘把全文看完再跟著步驟操作 操作步驟: 1.集群環境:master、slave1和slave2;操作系統為Cento ...
本文配置可實現:集群伺服器之間相互可以ssh免密登錄。若只想從單一機器(如master)ssh免密登錄其他機器(slave1、slave2),則只跟著操作到第二步即可。
建議先花兩三分鐘把全文看完再跟著步驟操作
操作步驟:
1.集群環境:master、slave1和slave2;操作系統為Centos7。為接下來敘述方便,除了master,其他所有slave統稱為slaveX
所有伺服器的/etc/hosts文件中都添加了必要的IP到主機名的映射,如下。
192.168.137.20 master
192.168.137.21 slave1
192.168.137.22 slave2
2.配置使得master上可免密登錄slaveX。
在master主機上執行以下命令。可以是非root用戶,我操作時用的是hadoop用戶。且根據我到目前為止的測試,用哪個用戶來做配置,最後就只能通過那個用戶實現免密登錄,其他用戶遠程登錄還是需要密碼的。
2.1 cd ~ //切換到用戶家目錄下
2.2 ls -al //查看家目錄下有無隱藏路徑是 .ssh。如果沒有,創建一個。註意查看.ssh目錄的許可權,是否是 700 (drwx --- ---), 不是的話修改為700
2.3 cd .ssh //進入到.ssh目錄下
2.4 ssh-keygen -t rsa //命令執行時連續敲回車符即可;
//該命令將會用rsa演算法在~/.ssh目錄下生成私鑰id_rsa和公鑰id_rsa.pub
2.5 ssh-copy-id master //該命令把生成的公鑰文件的內容追加到master的authorized_keys 文件中;
//註意執行此命令之前authorized_keys文件可能並不存在,沒關係,直接執行該命令就行,會自動生成的,當然也可以自己創建一個;需註意authorized_keys文件的許可權得是600;
//除了ssh-copy-id命令,也可以用cat id_rsa.pub >> authorized_keys的方式將公鑰內容追加到authorized_keys 文件中,實在不行你用複製粘貼的方式把內容追加進去應該也是可以的。
//執行完該步驟之後在master上就可以通過ssh master命令免密登錄自己了。(在這一步之前即使是通過ssh登錄自己,也是每一次都需要手動輸入密碼的)
//authorized_keys文件中的內容是以ssh-rsa開頭的一組字元串,如下圖:
註:圖中的主機名跟文中描述的master、slaveX不一致,但是不影響對uthorized_keys 文件中內容格式的理解。
2.6 ssh-copy-id slaveX //把master的公鑰追加到slaveX的authorized_keys 文件中,之後master可免密登錄slaveX
3.配置使得slaveX可以免密登錄集群中其他機器
經過上面第二步之後,在master上便已經可以ssh免密登錄master、slaveX了,但是從slaveX上依然無法ssh免密登錄其他機器(master、slaveX),若想使得slaveX也像master那樣可以免密登錄其他機器,則需要在slaveX上也執行第2步同樣的步驟,即:在slaveX上生成自己的私鑰公鑰對,然後將它的公鑰追加到其他機器的authorized_keys 文件中。
綜上,若想配置集群伺服器之間相互可以ssh免密登錄,可以有以下兩種方法:(兩種方法的本質是一樣的,只不過執行的過程步驟有些許不同)
方法一:一臺一臺伺服器地按照第2步那樣操作下去,直到所有機器都配置完成為止;
方法二:所有機器,包括master和slaveX,先分別用ssh-keygen -t rsa命令生成各自的私鑰公鑰對,接著用ssh-copy-id master命令將master和slaveX的公鑰都追加到master的authorized_keys 文件中,當全部追加完畢之後,master的authorized_keys 文件中便已有集群中所有伺服器(包括master自己和其他slave)的公鑰信息了(可知此時集群中所有機器都可免密ssh登錄master了),它是一份完整的公鑰信息文件,這個時候再用scp命令將master上的authorized_keys依次發送到各個slave的~/.ssh/目錄下(scp命令示例:scp ~/.ssh/authorized_keys hadoop@node01:~/.ssh/)。如此,便使得整個集群相互之間都可以免密ssh登錄了。
至於下麵這一步,在網上查詢資料時在個別博文中看到操作中有這步,我操作時沒有配置這項,我不知道它對結果有什麼影響,因為我沒有做這步配置也使得ssh免密登錄成功了。如果一定要配置的話,則是在第2步執行之前完成這項配置。
集群中的每台主機上
sudo vim /etc/ssh/sshd_config
開啟下麵的選項
RSAAuthentication yes //允許用RSA密鑰進行身份驗證
PubkeyAuthentication yes //允許用公鑰進行身份驗證
AuthorizedKeysFile .ssh/authorized_keys //本機保存的公鑰的文件(這個比較重要)
對於/etc/ssh/sshd_config文件,網上查詢到的建議:『除非有必要,否則請不要更改 /etc/ssh/sshd_config 這個檔案的設定值!』因為預設的情況下通常都是最嚴密的 SSH 保護了,因此,可以不需要更動他!