前文

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 () {
<span class="token comment">#加载expect文件路径</span>
/usr/bin/expect<span class="token operator">&lt;&lt;-</span><span class="token string">EOF

spawn ssh -o "StrictHostKeyChecking no" \(user</span>@<span class="token variable">\)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 </span><span class="token builtin class-name">echo</span> $<span class="token punctuation">{<!-- --></span>array_adress<span class="token punctuation">[</span>@<span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token variable">

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,希望这篇文章可以给你带来一些想法,谢谢。

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览13852 人正在系统学习中

[转帖]shell脚本使用expect自动化交互登录远程主机进行批量关机的更多相关文章

  1. Shell编程之Expect自动化交互程序

    一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...

  2. CentOS 下运维自动化 Shell 脚本之 expect

    CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...

  3. SHELL脚本编程-expect

    SHELL脚本编程-expect 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.expect概述 1>.expect介绍 expect 是由Don Libes基于Tcl( ...

  4. 通过shell脚本实现代码自动化部署

    通过shell脚本实现代码自动化部署 一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打 ...

  5. shell脚本通过expect脚本实现自动输入密码(使用expect)

    背景:在远程文件下载时,需要输入对方的服务器密码,shell不支持交互输入内容,可以用下面两种方式实现   一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具. ...

  6. shell脚本通过expect脚本实现自动输入密码

     背景:在远程文件下载时,需要输入对方的服务器密码,shell不支持交互输入内容,可以用下面两种方式实现   一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具 ...

  7. Shell基础(四):字符串截取及切割、字符串初值的处理、基使用Shell数组、expect预期交互、使用正则表达式

    一.字符串截取及切割 目标: 使用Shell完成各种Linux运维任务时,一旦涉及到判断.条件测试等相关操作时,往往需要对相关的命令输出进行过滤,提取出符合要求的字符串. 本案例要求熟悉字符串的常见处 ...

  8. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...

  9. Expect自动化交互程序

    Expect介绍: 1.什么是Expect Expect是一个用来实现自动化交互功能的软件套件,基于TCL的脚本编程工具语言,方便学习,功能强大. 2.为什么要使用expcet: 当今的企业运维中,自 ...

  10. [转帖]Shell脚本中的break continue exit return

    Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 cont ...

随机推荐

  1. APM市场冰火两重天,或许只是行业无处安放的焦虑

    近两年来,无论从国内还是到国外,市场出现一种APM批判的论调,甚至有"传统APM已经落后"的个别声音出现. 可放眼望去,国外主流APM厂商如:DATADOG. Dynatrace. ...

  2. HDU 2144 Evolution 后缀树/后缀数组

    HDU 2144 Evolution 后缀树/后缀数组 题意 给我们不到一百个字符串(长度不到一百)以及一个百分比q,然后如果某两个字符串的最长公共子串占比超过了q(在两个串中都超过)则两个串为一个集 ...

  3. Prometheus 快速入门

    Prometheus&Grafana快速入门 一.prometheus简介 prometheus是监控多个大数据组件的监控系统.Prometheus是由SoundCloud开发的开源监控报警系 ...

  4. .NET技术分享日活动-202110

    2021年10月15日下午,个人组织举办了山东地区的第三次.NET技术分享日活动.围绕.NET.低代码Low Code.云原生 Cloud Native.大数据.算法等方向进行创新技术的实践分享. 本 ...

  5. EDS从小白到专家丨打造数据交换的六边形卫士,让你的数据你做主

    本文分享自华为云社区<[EDS从小白到专家]第4期:打造数据交换的六边形卫士,让你的数据你做主>,作者: 开天aPaaS小助手 . 你还在担心数据共享后一旦"失控"将爆 ...

  6. 带你彻底搞懂高性能网络模式Reactor 和 Proactor

    ​​​​摘要:无论是 Reactor,还是 Proactor,都是一种基于「事件分发」的网络编程模式,区别在于 Reactor 模式是基于「待完成」的 I/O 事件,而 Proactor 模式则是基于 ...

  7. 训练千亿参数模型的法宝,昇腾CANN异构计算架构来了~

    摘要:盘古的训练以「昇腾AI处理器」为基座,同时借助了「CANN 异构计算架构」,让硬件算力得以充分释放,大大缩短了训练时间! 2021年4月,"华为云盘古大模型"一炮走红AI人工 ...

  8. 华为云GaussDB(for MySQL)2.0全新升级,三大技术大揭秘

    摘要:9月23日,在华为全联接2021主会场,华为高级副总裁.华为云CEO.消费者云服务总裁张平安发表"深耕数字化,一切皆服务"主题演讲,并发布了GaussDB(for MySQL ...

  9. 企业诊断屋:二手车交易平台 APP 如何用 AB 测试赋能业务

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 2023年汽车行业新车市场低靡,由新车降价引发的车辆价格波动很快传导到二手车市场,二手车的交易也受到了冲击,收车验 ...

  10. 企业诊断屋:在线小说企业如何用A/B测试赋能业务

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   近两年来,在线小说领域业务发展"降速",相较于几年前的快速扩张,2022年后国内在线小说企 ...