準(zhǔn)備工作:
使用前,需要yum install expect
1.用 vi /etc/hosts 編輯將要進(jìn)行互信的多臺(tái)服務(wù)器配置進(jìn)入
例:
192.168.0.175 masters
192.168.0.176 node1
192.168.0.177 node2
2.然后創(chuàng)建互信腳本:
#!/bin/sh
########################################################
#
# 該腳本用來(lái)生成服務(wù)器之間的免密
# DEST_USER :系統(tǒng)用戶
# PASSWORD : 系統(tǒng)密碼
# HOSTS_FILE : 服務(wù)器名稱的配置文件
# 使用方法: sh xxx.sh remoteUser remotePassword hostsFile
#
########################################################
DEST_USER=$1
PASSWORD=$2
HOSTS_FILE=$3
#判斷輸入?yún)?shù)是否滿足
if [ $# -ne 3 ]; then
? ? echo "ex: sh $0 remoteUser remotePassword hostsFile"
? ? exit 1
fi
SSH_DIR=~/.ssh
SCRIPT_PREFIX=./tmp
echo ===========================
# 先刪除.ssh目錄下的所有文件
rm -rf $SSH_DIR
mkdir $SSH_DIR
chmod 700 $SSH_DIR
# 2. generat ssh key
TMP_SCRIPT=$SCRIPT_PREFIX.sh
echo? "#!/usr/bin/expect">$TMP_SCRIPT
echo? "spawn ssh-keygen -b 1024 -t rsa">>$TMP_SCRIPT
echo? "expect *key*">>$TMP_SCRIPT
echo? "send \r">>$TMP_SCRIPT
if [ -f $SSH_DIR/id_rsa ]; then
? ? echo? "expect *verwrite*">>$TMP_SCRIPT
? ? echo? "send y\r">>$TMP_SCRIPT
fi
echo? "expect *passphrase*">>$TMP_SCRIPT
echo? "send \r">>$TMP_SCRIPT
echo? "expect *again:">>$TMP_SCRIPT
echo? "send \r">>$TMP_SCRIPT
echo? "interact">>$TMP_SCRIPT
chmod +x $TMP_SCRIPT
/usr/bin/expect $TMP_SCRIPT
rm $TMP_SCRIPT
# 3. generat file authorized_keys
cat $SSH_DIR/id_rsa.pub>>$SSH_DIR/authorized_keys
# 4. chmod 600 for file authorized_keys
chmod 600 $SSH_DIR/authorized_keys
echo ===========================
# 5. copy all files to other hosts
for ip in $(cat $HOSTS_FILE)??
do
? ? if [ "x$ip" != "x" ]; then
? ? ? ? echo -------------------------
? ? ? ? TMP_SCRIPT=${SCRIPT_PREFIX}.$ip.sh
? ? ? ? # check known_hosts
? ? ? ? val=`ssh-keygen -F $ip`
? ? ? ? if [ "x$val" == "x" ]; then
? ? ? ? ? ? echo "$ip not in $SSH_DIR/known_hosts, need to add"
? ? ? ? ? ? val=`ssh-keyscan $ip 2>/dev/null`
? ? ? ? ? ? if [ "x$val" == "x" ]; then
? ? ? ? ? ? ? ? echo "ssh-keyscan $ip failed!"
? ? ? ? ? ? else
? ? ? ? ? ? ? ? echo $val>>$SSH_DIR/known_hosts
? ? ? ? ? ? fi
? ? ? ? fi
? ? ? ? echo "copy $SSH_DIR to $ip"
?? ? ? echo? "#!/usr/bin/expect">$TMP_SCRIPT
? ? ? ? echo? "spawn scp -r? $SSH_DIR $DEST_USER@$ip:~/">>$TMP_SCRIPT
? ? ? ? echo? "expect *assword*">>$TMP_SCRIPT
? ? ? ? echo? "send $PASSWORD\r">>$TMP_SCRIPT
? ? ? ? echo? "interact">>$TMP_SCRIPT
? ? ? ?chmod +x $TMP_SCRIPT
? ? ? ? #echo "/usr/bin/expect $TMP_SCRIPT" >$TMP_SCRIPT.do
? ? ? ? #sh $TMP_SCRIPT.do&
? ? ? ? /usr/bin/expect $TMP_SCRIPT
? ? ? ? rm $TMP_SCRIPT
? ? ? ? echo "copy done."? ? ? ? ? ? ? ??
? ? fi
done
echo done.
3.centos 6.5 執(zhí)行腳本的時(shí)候可能會(huì)提示裝一個(gè)類似expect的插件,之間執(zhí)行yum install expect 安裝完成后,創(chuàng)建hosts配置文件,vi hosts,把需要進(jìn)行互信的主機(jī)名添加進(jìn)去。列:
master
node1
node2
4.進(jìn)入腳本所在目錄,執(zhí)行腳本 ,腳本使用方法
使用方法: sh xxx.sh remoteUser remotePassword hostsFile
例:sh 你所創(chuàng)建的sh腳本名稱? 當(dāng)前所在主機(jī)的用戶名(一般為root) 當(dāng)前鎖在主機(jī)的用戶名密碼(123123) hosts
? 如 sh?1ssh_auth.sh root 123123 hosts 回車
幾秒后幾臺(tái)主機(jī)之間的互信就會(huì)完成,可以進(jìn)行相互之間的測(cè)試 ssh node1 ssh node2 看有沒有需要輸入密碼的情況,正常情況是不需要輸入密碼。