学习

Linux中expect工具完成远程交互通信(2)

2021-02-12  本文已影响0人  刘小白DOER

    上一篇文章讲诉了怎么利用expect工具完成远程交互通信,通过打包后的脚本zlssh可以实现远程执行指令。那么这一讲更进一步,利用FOR循环完成局域网中linux主机集群操作。

    先来看看读取linuxhosts文件然后打印出来的脚本,linuxhosts文件里面可以放置局域网集群的主机IP地址,也可以放置主机名,这需要在/etc/hosts( hosts文件是Linux系统中一个负责IP地址与域名快速解析的文件)里面进行配置。详情请参考笔者以前的文章-linux中/etc/hosts文件配置。

#!/bin/bash

for myhostname in  `cat linuxhosts`

do

echo $myhostname

done

    说明的脚本循环完成文件中定义的主机,那么再加上zlssh脚本就可以循环完成局域网集群的远程控制功能。

auto_cmd.sh:

#!/bin/bash

hostname = `hostname`

for myhostname in  `cat /home/pi/linuxhosts`

do

    if [ $myhostname = $hostname ]

    then

        echo " This local machine !!!"

        continue;

    fi

    net=`ping $myhostname -c 1 -w 1 |grep received | awk '{print $4}'`

    if [ "$net" = "0" ]

    then 

        echo " ==============host $myhostname is down ??? "

    else 

        ./zlssh  $myhostname password "$1" 

        echo  "---------$myhostname"

    fi

done

    远程关机集群运行:./auto_cmd.sh shutdown.

    脚本就是循环读取linuxhosts文件,看是否能ping通,然后执行通过zlssh远程执行shutdown指令。但是判断为本机则跳过不执行,毕竟本机被关了怎么执行后续的命令呢。

    在集群的管理主机上,把主机写入linuxhosts文件,通过auto_cmd.sh可以统一对集群内的主机做一系列的操作,完成自动化运维工作。

    或者格式化读取写好的/etc/hosts文件,比如读取第一行的ip数据:cat /etc/hosts | awk '{print $1}',awk 可以实现按行读取/etc/hosts文件来查找ip地址。

SSH更换为SCP

    上面打包功能化ssh,远程到局域网集群执行命令,如果将ssh更换为scp,那么一个远程分发脚本就出来了。 即将上一篇文章中zlssh的spawn ssh $remote_host $command更换为spawn scp $local_file $remote_path。

    ./zlscp 192.168.31.103  password    get.py  192.168.31.103:/home/pi

    这一条命令就是将文件 get.py分发到局域网集群中的/home/pi目录下。

上一篇下一篇

猜你喜欢

热点阅读