在實際開發過程當中,若是集羣數量過多,集羣建傳輸要頻繁輸入密碼就會很麻煩,因此咱們通常都會給集羣配置免密登陸,下面以一臺機器爲例,給你們分享一下手動配置免密登陸和腳本一件配置免密登陸的方法node
集羣的機器都要配置 vim /etc/hosts
在各個節點分別執行 cd ~/.ssh #進入到個人home目錄 若是是新建立的服務器或者是虛擬機可能會報錯 **[root@node2 ~]# cd ~/.ssh -bash: cd: /root/.ssh: No such file or directory** 解決方法見另外一篇文章( https://segmentfault.com/a/1190000019919016?share_user=1030000019541827) 而後執行生成密鑰命令 ssh-keygen -t rsa (四個回車) 執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到要免登錄的機器上 分別在node1,node2, node3執行 ssh-copy-id -i ~/.ssh/id_rsa.pub node1
在node1上執行 ssh-copy-id -i ~/.ssh/id_rsa.pub node1 ssh-copy-id -i ~/.ssh/id_rsa.pub node2 ssh-copy-id -i ~/.ssh/id_rsa.pub node3 從而讓各個節點互相擁有其餘節點的祕鑰(流程與上圖相同,就再也不截圖)
在node1執行命令ssh node2 是否直接登陸: 需互相驗證 node1->node1 node1->node2 node2->node1 node2->node2 node1->node3 node3->node3 node3->node1 node2->node3 node3->node2 驗證經過例子以下圖所示,就不一一驗證全部的狀況了
sshFreeLogin.sh腳本代碼
#! /bin/bash function sshFreeLogin() { #1.檢測expect服務是否存在,不存在則使用yum安裝expect expectIsExists=`rpm -qa | grep expect` if [ -z $expectIsExists ] then yum -y install expect fi #2.密鑰對不存在則建立密鑰 [ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa while read line;do #提取文件中的ip hostname=`echo $line | cut -d " " -f2` #提取文件中的用戶名 user_name=`echo $line | cut -d " " -f3` #提取文件中的密碼 pass_word=`echo $line | cut -d " " -f4` expect <<EOF #複製公鑰到目標主機 spawn ssh-copy-id $hostname expect { #expect實現自動輸入密碼 "yes/no" { send "yes\n";exp_continue } "password" { send "$pass_word\n";exp_continue } eof } EOF # 讀取存儲ip的文件,host_ip文件所在的目錄地址 done < /home/hadoop/automaticDeploy/host_ip.txt } sshFreeLogin
host_ip.txt配置
192.168.31.35 node1 root 123456 192.168.31.36 node2 root 123456 192.168.31.37 node3 root 123456
分別對應 ip 主機名 用戶名 密碼
腳本配置完成後,直接執行便可,腳本能夠隨意增長集羣機器數量,可是暫時只能執行腳本的集羣能夠免密登陸其餘全部機器vim