美文网首页学习
Linux中expect工具完成远程交互通信(2)

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

作者: 刘小白DOER | 来源:发表于2021-02-12 18:58 被阅读0次

        上一篇文章讲诉了怎么利用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目录下。

    相关文章

      网友评论

        本文标题:Linux中expect工具完成远程交互通信(2)

        本文链接:https://www.haomeiwen.com/subject/euqjxltx.html