shell脚本使用expect自动化交互登录远程主机进行批量关机

14 篇文章 0 订阅
这篇博客介绍了如何利用 Expect 脚本结合 ShellScript 实现批量自动登录到多台远程主机,并执行关机命令。文章详细讲解了 Expect 的功能、安装检查、脚本编写要点,包括预期关键字的匹配和避免错误的方法,以及提供了脚本示例和使用技巧。
摘要由CSDN通过智能技术生成

前文

1.目标主机登录用户都为root,且密码一致
2.目标主机开放启动了SSH服务且22号端口可访问(防火墙未进行拦截)

软件介绍

expect

Expect是一个用来实现自动和交互式任务进行通信的免费编程工具语言。由Don Libes在1990年开始编写。
结合Shell Script实现自动和交互式任务进行通信,而无需人的干预。

实现代码

#!/bin/bash
#Author:cosann
#date:2022/7/21
#description:该脚本可以实现批量登录远程主机执行命令


#检测安装expect
rpm -qa | grep expect 
if [ $? -eq 0 ];then
    echo "Expect软件已安装"
else
    echo "Expect软件未安装"
    yum install -y expect &> /dev/null
fi 


#初始化远端主机账户及密码
user=root
passwd=123456

#设定超时
set timeout 30

#定义并初始化远端主机IP列表
array_adress=( 
    192.168.222.133
    192.168.222.134
    192.168.222.240 
    192.168.222.250
    192.168.222.132
    )   #最后IP写上运行脚本的主机,即关闭自身

#定义登录远程主机函数
function remote_shutdown () {
    
    #加载expect文件路径
    /usr/bin/expect<<-EOF
spawn ssh -o  "StrictHostKeyChecking no" $user@$address 
expect { 
"Connection refused" exit
"No route to host" exit
"*password" {send "$passwd\r"}
}
expect "*]#"
send "#登录远程主机成功,开始推送关机指令!\r"
expect "*]#"
send "shutdown -h now \r"
expect "*]#"         
send "exit\r"            
expect eof               
EOF
}

#循环控制执行远端主机命令
for address in `echo ${array_adress[@]}`
do
    #调用函数执行远程登录关机
    shutdown
done

使用tips:expect代码块处的shutdown关机命令换成其他命令就可以批量在远端主机执行其他命令啦

#例如
expect "*]#"	#匹配*]#关键字后执行下面的命令
send "date\r"	#显示日期

避坑心得

1. expect缩进

expect的编码方式有多种写法,如果使用本文的写法,注意不能写成以下格式,亲测报错

expect { "*password" {send "$passwd\r"}
}

#正确写法
expect { 
"*password" {send "$passwd\r"}
}
2.关于expect最后的关键字EOF
spawn ssh  root@127.0.0.1 
expect { 
"*password" {send "123456\r"}
}
expect "*]#"         
send "exit\r"            
expect eof               
EOF				#前后不能有空格,否则会报错

以上是关于expect使用的案例分享,现在已有很方便且简易的工具可以实现以上类似且更强大的功能,但是如果你和我一样也在了解expect,希望这篇文章可以给你带来一些想法,谢谢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值