前文

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. Golang实现JAVA虚拟机-解析class文件

    原文链接:https://gaoyubo.cn/blogs/de1bedad.html 前言 所需前置知识为:JAVA语言.JVM知识.Go笔记 对应项目:jvmgo 一.准备环境 操作系统:Wind ...

  2. Programming Abstractions in C阅读笔记:p196

    <Programming Abstractions in C>学习第63天,p196总结.涉及到编程之外的知识,依然是读起来很费劲,需要了解作者在书中提到的人物(Edouard Lucas ...

  3. 实践案例丨CenterNet-Hourglass论文复现

    摘要:本案例是CenterNet-Hourglass论文复现的体验案例,此模型是对Objects as Points 中提出的CenterNet进行结果复现. 本文分享自华为云社区<Center ...

  4. 只需2步,教你在Vue中设置登录验证拦截

    摘要:两步教你在Vue中设置登录验证拦截! 本文分享自华为云社区<两步教你在Vue中设置登录验证拦截!>,作者: 灰小猿 . 今天在做vue和springboot交互的一个项目的时候,想要 ...

  5. CodeFormer一款既能人脸修复、还能视频去码的AI软件,附下载使用教程

    CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强.它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果 工作原理 1.通过自动 ...

  6. ME21N 采购订单新增页签增强

    1.实现效果 根据客制化需求,要在采购订单中新增大量字段,所以要在界面上添加一个单独的页签.效果如下: 2.增强实现 2.1.增强结构 因为是在抬头上边添加,所以增强CI_EKKODB结构 2.2.函 ...

  7. CH0304 IncDec Sequence (差分)

    题目链接: https://ac.nowcoder.com/acm/contest/999/B 思路:(见图中解释) AC代码: #include<bits/stdc++.h> using ...

  8. Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) (个人题解)

    Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) A. Prison Break https:// ...

  9. OKR之剑·实战篇06:OKR致胜法宝-氛围&业绩双轮驱动(下)

    作者:vivo 互联网平台产品研发团队 本文是<OKR 之剑>系列之实战第 6 篇-- 本文介绍团队营造氛围的方法与实践.在业绩方面的探索与输出,在两方面分别总结了一些经验分享给大家. 一 ...

  10. vivo平台化实践探索之旅-平台产品系列01

    vivo 互联网平台产品研发团队- Yang Yang 本篇为<vivo 平台产品>系列文章的第1篇.主要描述在业务高速发展的背景下,vivo软件工程师通过系统平台化建设等手段,逐步解决软 ...