ssh批量互信脚本

回复 收藏
#!/bin/sh
#date:2016-05-17
#wrinte:lxh


cat ./iplist.txt |grep -v "^$" >iplist.tmp
iplist=./iplist.tmp
nu=`cat $iplist |wc -l`

if [ $nu -eq 0 ];then
        echo -e "\033[31m列表为空!\033[0m"
        exit
fi

#if [ $# -ne 3 ]; then
#    echo "Usage:"
#    echo "$0 remoteUser remotePassword hostsFile"
#    exit 1
#fi

SSH_DIR=~/.ssh
SCRIPT_PREFIX=./tmp
echo ===========================
# 1. prepare  directory .ssh
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 i in `seq 1 $nu` ;do
        ip=`sed "$i"p -n $iplist |awk '{print $1}' |sed s/[[:space:]]//g`
        DEST_USER=`sed "$i"p -n $iplist |awk '{print $2}' |sed s/[[:space:]]//g`
        PASSWORD=`sed "$i"p -n $iplist |awk '{print $3}' |sed s/[[:space:]]//g`
       
        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
rm $iplist
echo done.

#######################
说明:在脚本目录下新建iplist.txt文件,格式为 ip   user     passwd
互信方法使用的是一台服务器生成公钥和私钥,把公钥复制authorized_keys,再把authorized_keys、id_rsa.pub、id_rsa这三个文件复制到需要互信的服务器的家目录下即可实现互信!!!

2016-05-24 13:49 举报
已邀请:
0

gxp2008

赞同来自:

是个好东西,在批量部署时,部署该脚本,就可以使用ansible批量管理了

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: