多台linux服务器之间互信脚本

准备工作:

使用前,需要yum install expect

1.用 vi /etc/hosts 编辑将要进行互信的多台服务器配置进入

例:

192.168.0.175 masters

192.168.0.176 node1

192.168.0.177 node2

2.然后创建互信脚本:

#!/bin/sh

########################################################

#

# 该脚本用来生成服务器之间的免密

# DEST_USER :系统用户

# PASSWORD : 系统密码

# HOSTS_FILE : 服务器名称的配置文件

# 使用方法: sh xxx.sh remoteUser remotePassword hostsFile

#

########################################################

DEST_USER=$1

PASSWORD=$2

HOSTS_FILE=$3

#判断输入参数是否满足

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 执行脚本的时候可能会提示装一个类似expect的插件,之间执行yum install expect 安装完成后,创建hosts配置文件,vi hosts,把需要进行互信的主机名添加进去。列:

master

node1

node2

4.进入脚本所在目录,执行脚本 ,脚本使用方法

使用方法: sh xxx.sh remoteUser remotePassword hostsFile

例:sh 你所创建的sh脚本名称  当前所在主机的用户名(一般为root) 当前锁在主机的用户名密码(123123) hosts

  如 sh 1ssh_auth.sh root 123123 hosts 回车

几秒后几台主机之间的互信就会完成,可以进行相互之间的测试 ssh node1 ssh node2 看有没有需要输入密码的情况,正常情况是不需要输入密码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容