多臺(tái)linux服務(wù)器之間互信腳本

準(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 看有沒有需要輸入密碼的情況,正常情況是不需要輸入密碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容