悄悄用shell加expect搞定繁重任务,和女神约会去

任务:

1、主机存活检查脚本

用for和while两种方式 ,读取hostip.txt主机清单, 实现 显示 主机存活状态。

第一种方法:for循环,适用场景,主机数较少。
1)创建主机列表文件
在这里插入图片描述

2)编辑脚本:

#!/bin/bash

LIST=`cat ipadds.txt`

for IP in $LIST
do
    ping -c 3 -i 0.2 -W 3 $IP &> /dev/null

    if   [ $? -eq 0 ]
    then
         echo "host $IP is up!"
    else
         echo "host $IP is down!"
    fi
done

3)验证:
在这里插入图片描述
第二种方法:while循环,适用场景,主机数多,某一网段。

1)编辑脚本
分析:可以将不在线和在线的主机分别存在两个文件里
在这里插入图片描述

#!/bin/bash
myping(){              //定义函数myping
ping -c4 -i0.1 -W1  192.168.2.$i  &> /dev/null
if [ $? -ne 0 ];then
  echo  192.168.2.$i  >> down.txt
else
  echo  192.168.2.$i  >> up.txt
fi
}
i=1               //定义变量i初始值为1
>down.txt
>up.txt
while [ $i -lt 6 ]    //当i小于6则执行下面命令(此处根据具体需要测试的主机网段填)
do
  myping &           //调用前面函数
  let i++            //i的值,叠加
done
sleep 2              //休眠2秒
echo  "不在线的主机:"  //显示提示信息,可以自定义
echo -n  `sort -n down.txt `   //sort -n屏幕输出:按数字大小排序
echo
echo  "在线的主机:"    //显示提示信息,可以自定义
echo -n `sort -n up.txt `
echo
                         

截图:注意,空格什么不能少;网段可根据实际情况填写;网段也是,为测试方便,只测试2.1~2.6
在这里插入图片描述

3)验证:
在这里插入图片描述

2、3台主机做免密登录

master、 node1、node2 要求写shell脚本结合expect方式 自动实现,没有人工干预。
1)检查环境(保证master主机和节点主机可以ping通,关闭防火墙;setenforce或者设置安全策略)
在这里插入图片描述
在这里插入图片描述
2)master主机:

编辑脚本
在这里插入图片描述
注意:提前配置好yum仓库;expect行,前面不要用空格,使用Table键,既能看起来,清晰,又不会报错!!!如不用tab键,必须顶到头写,此脚本不是双向免密,只能执行脚本的主机免密登录远程主机。
如果想要取消免密登录,执行命令 rm -f /root/.ssh/known_hosts 即可!

#!/bin/bash
cat > /root/hosts << E
192.168.2.2 root 123456
192.168.2.3 root 123456
E
yum -y install expect  &> /dev/null   
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa  //注意:""之间无空格
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
while read line
 do
   user=`echo $line | cut -d " " -f 2`    //注意:" "之间有空格
   ip=`echo $line | cut -d " " -f 1`
   passwd=`echo $line | cut -d " " -f 3`
expect  <<EOF
        set     timeout 10
        spawn   scp     -r /root/.ssh $ip:/root
        expect  {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$passwd\n" }
        }
        expect "password" { send "$passwd\n" } //注意:此行也可写成expect eof

EOF
        done < /root/hosts   //注意:如果,用相对路径,必须在hosts文件的当前路径执行脚本


截图:
在这里插入图片描述
或者,此法代码更少,更好记
在这里插入图片描述

3)为脚本设置权限,并执行脚本(注意,只能使用source或 .的方式执行)
在这里插入图片描述

3)验证:执行脚本完成,登录任意节点,不用输入密码。

在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Friends of the wind

您的是我坚持原创免费作品的不懈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值