任务:
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)验证:执行脚本完成,登录任意节点,不用输入密码。