返回

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

发布时间:2022-11-21 15:53:57 292
# linux# ssh# 脚本# 信息

任务:

1、主机存活检查脚本

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

第一种方法:for循环,适用场景,主机数较少。

1)创建主机列表文件

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

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)验证:

悄悄用shell加expect搞定繁重任务,和女神约会去_脚本语言_02

 

第二种方法:while循环,适用场景,主机数多,某一网段。1)编辑脚本

分析:可以将不在线和在线的主机分别存在两个文件里

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

#!/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

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

3)验证:

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

2、3台主机做免密登录

master、 node1、node2 要求写shell脚本结合expect方式 自动实现,没有人工干预。

1)检查环境(保证master主机和节点主机可以ping通,关闭防火墙;setenforce或者设置安全策略)

悄悄用shell加expect搞定繁重任务,和女神约会去_脚本语言_06

 

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

 

2)master主机:编辑脚本

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

 

注意:提前配置好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文件的当前路径执行脚本

截图:

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

 

或者,此法代码更少,更好记

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

3)为脚本设置权限,并执行脚本(注意,只能使用source或 .的方式执行)

悄悄用shell加expect搞定繁重任务,和女神约会去_脚本语言_11

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

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


 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线