当前位置:网站首页>Shell expect 实战案例
Shell expect 实战案例
2022-08-04 22:41:00 【51CTO】
1、需要向集群的机器中执行命令,或者修改某个配置
环境准备:三台虚拟机 ip 为 192.168.0.102 192.168.0.107 192.168.0.108
方法1采用ssh [email protected] “cmd”的方式
1) 开发expect自动交互命令,文件名为exec_cmd1.exp
#!/usr/bin/expect
set ip [lindex $argv 0]的位置参数传入ip
set cmd [lindex $argv 1]的第2个位置参数需要执行的命令
set password "zhangbichen"设置root的paasword
spawn ssh [email protected]$ip "$cmd"
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "$password\r"}
}
expect eof
2) 使用shell循环在执行expect命令,batch_exec_cmd1.sh在各个多个主机上交互执行。
#!/usr/bin/bash
cmd=$1
if [ $# -ne 1 ]
then
echo $"usage:$0 cmd"
exit 1
fi
ip_list=(192.168.0.107 192.168.0.102 192.168.0.108)
for ip in ${ip_list[@]}
do
echo $ip
expect exec_cmd1.exp $ip "$cmd"执行expect脚本传入expect设置的两个位置参数
done
方法2采用交互登录到命令行时发送命令执行
[[email protected] scripts]# cat exec_cmd.exp
#!/usr/bin/expect
set host [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set root_password [lindex $argv 3]
spawn ssh [email protected]$host
set timeout 1
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "$password\r"}
}
expect "$"
send "su - root\r"
expect "Password"
send "${root_password}\r"
expect "#" {send "cp /etc/profile /etc/profile.bak\r"}
expect eof
批量执行expect脚本
#!/urs/bin/bash
ip_list=(192.168.0.107 192.168.0.102)
for ip in ${ip_list[@]}
do
echo $ip
expect exec_cmd.exp $ip test01 yankefei yankefei
done
注意:一般生产环境都是先用普通用户登录,在切换root用户登录, 用户名和密码可以直接定义到expect脚本中
2、批量发送文件
1)开发expect自动交互脚本
[[email protected] scripts]# cat send_file.exp
#!/usr/bin/expect
set file [lindex $argv 0]
set host [lindex $argv 1]
set remote_dir [lindex $argv 2]
set password "zhangbichen"
spawn scp -P22 -rp $file [email protected]$host:${remote_dir}
set timeout 1
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "$password\r"}
}
expect eof
2)开发循环批量发送脚本
[[email protected] scripts]# cat batch_send.sh
#!/urs/bin/bash
file=$1
remote_dir=$2
ip_list=(192.168.0.107 192.168.0.102)
for ip in ${ip_list[@]}
do
echo $ip
expect send_file.exp $file $ip ${remote_dir}
done
3、批量在所有服务器上执行shell脚本
1)按照章节2批量发送文件的例子将将脚本发送到所有服务器的指定目录
2)按照章节1的在所有机器上执行命令 sh batch_exec_cmd1.sh “source /opt/108.sh”
边栏推荐
- Both synchronized and ReentrantLock are smooth, because they are reentrant locks, and a thread will not deadlock if it takes the lock multiple times. We need reentrant locks
- QT[一] 信号与槽
- MySQL的JSON 数据类型1
- 【项目实战】仿照Room实现简单管理系统
- Ts——项目实战应用enum枚举
- 生成回文数
- As hot as ever, reborn | ISC2022 HackingClub White Hat Summit was successfully held!
- 双非读者,一举拿下阿里、字节、美团、京东、虾皮offer
- rk3399-0.0 svc command
- QT 子窗口—>主窗口 信号和槽的交互
猜你喜欢
BUG | The interface returns abnormal data
Reconfigure the ffmpeg plugin in chrome
【论文笔记KDD2021】MixGCF: An Improved Training Method for Graph Neural Network-based Recommender Systems
SRv6网络的安全解决方案
历史上的今天:PHP公开发布;iPhone 4 问世;万维网之父诞生
MQTT[一]基础知识介绍
【3D建模制作技巧分享】Maya模型如何导入zbrush
轮播图动态渲染
2022七夕程序员必备的表白黑科技(七夕限定款)
深度学习 RNN架构解析
随机推荐
一招包治pycharm DEBUG报错 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode
老叶的三束玫瑰
go语言的time包介绍
轮播图动态渲染
如何在项目中正确使用WebSocket
SQL Server 调用 WebService
rk3399-0.0 svc命令
Jbpm3.2 开发HelloWorld (简单请假流程)客户端
Both synchronized and ReentrantLock are smooth, because they are reentrant locks, and a thread will not deadlock if it takes the lock multiple times. We need reentrant locks
基于事实的讨论
现在学习次世代3D游戏建模还能找到高薪好工作吗
深度学习 RNN架构解析
Acwing3593. 统计单词
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
【3D建模制作技巧分享】ZBrush如何设置笔刷快捷键
字节跳动秋招提前批高频面试问题汇总!(内附答案!)
Reconfigure the ffmpeg plugin in chrome
Redisson
rk3399-0.0 svc command
FinClip崁入式搭建生态平台,降低合作门槛