CentOS 下运维自动化 Shell 脚本之 expect
CentOS 下运维自动化 Shell脚本之expect
一、预备知识:
1、在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符。(“echo -e
与print
效果相同”)
- 在 Terminal 结尾反斜杠,当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。
2、区别 “命令输出” 与 “命令引用” 以及 POSIX(可移植操作系统接口)
- sh -c "ifconfig"
- bash -c "ifconfig"
- $( ifconfig )
- `ifconfig`
3、命令与命令的”引用、嵌套“是 $() 或 `` 可参见此文
4、命令输入输出进行自动化完成,我们成为与命令行的交互。* 全自动命令交互无需用户干涉即需要用到"expect" *
二、事件分析:
北京某家公司是一家 IDC公司为用户提供优质服务,现某客户找到技术人员要求检测将其测试虚拟机进行维护。
三、思路整理:
宗旨:为不过多干扰用户优质体验,应尽量减少用户操作。
1、审查用户需求是否正常。
2、判断是否可以立刻解决。
3、是否可以正常连接网络。
4、询问是否是否拥有公网。
5、给予加密脚本程序执行。
6、技术人员已经远程操作。
关于步骤五具体过程:
1、服务器开设SSH用户
- 使用”-M“参数不生产用户家目录
2、测试SSH转发是否正常
3、使用工具加密脚本
- shc -v -f filename.sh
4、上传第三方文件储存处
- git commit
- sh $(wget -c https://raw.githubusercontent.com/username/filename.sh -O filename.sh.x)
5、发送并进行安全维护
下述为重点:进行端口转发及自动化处理几种办法。
四、expect 脚本编写
Expect中最关键的四个命令是send,expect,spawn,interact。
send: 用于向进程发送字符串
expect: 从进程接收字符串
spawn: 启动新的进程
interact:允许用户交互
1、基础版本:
#!/usr/bin/expect
//这是脚本解释器(bangshe),用于指使用expect解释。
spawn ssh root@aliyun.example.com -p 9452
//使用spawn打开一个进程
expect {
//表接收或理解为发现"yes/no"
"yes/no" {send "yes\n" ; exp_continue}
//发送yes并回车;exp_continue 表示继续执行
"password:" {send "passwd\n"}
//表接收或理解为发现"password:" 发送passsword并回车
}
expect {
"#" {send "``date``\n"}
//发现#,说明成功登陆操作系统
}
send "/etc/init.d/atd restart\n"
send "echo '/bin/bash /srv/shell/export.sh' | at now+1hour \n"
send "setsid /bin/env python3 /srv/shell/muniao.py\n"
send "setsid /bin/env python3 /srv/shell/xiaozhu.py\n"
send "touch 'this is a rabbit'\n"
send "exit\n"
expect eof
//表示send可以完成发送
interact
//表示转给用户操作
还有俩个注意的地方:双引号里面是单引号、输出形脚本使用interact(eof会将send一个个执行)、需要使用setsid时候关闭窗口并非exit
CentOS 下运维自动化 Shell 脚本之 expect的更多相关文章
- linux运维自动化shell脚本小工具
linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...
- 转 如何不耍流氓的做运维之——SHELL脚本
家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写 SHELL 脚本如何能够不耍流氓. 下面的案例,我们以 MySQL 数据库备份 SHELL 脚本的案例来进行阐述. 不记录 ...
- 如何不耍流氓的做运维之-SHELL脚本
前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓. 下面的案例,我们以MySQL数据库备份SHELL脚本的案例来进行阐述: 不记录日志 ...
- Centos下使用php调用shell脚本
我们在实际项目中或许会遇到php调用shell脚本的需求.下面就用简单案例在Centos环境下实践 准备 查看php.ini中配置是否打开安全模式 //php.ini safe_mode = //这个 ...
- Linux运维之shell脚本进阶篇
一.if语句的使用 1)语法规则 if [条件] then 指令 fi 或 if [条件];then 指令 fi 提示:分号相当于命令换行,上面两种语法等同特殊写法:if[ -f"$file ...
- Linux运维之shell脚本
一.bash漏洞 1)bash漏洞 bash漏洞是控制Linux计算机命令提示符的软件中存在的漏洞. bash是一个为GNU计划编写的Unix shell.它的名字是一系列缩写:Bourne-Agai ...
- Linux运维之shell脚本基础知识
1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...
- 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)
一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...
- 运维常用shell脚本之日志清理
1.创建一个日志清理脚本 #/bin/bash for i in `find /root/.pm2/logs -name "*.log"` do cat /dev/null > ...
随机推荐
- zabbix中文乱码解决方法
将windows下的字体文件Fonts\simkai.ttf上传到zabbix的WEB目录下的fonts目录下 修改zabbix的PHP配置 将原来的DejaVuSans更改成simkai vim / ...
- 算法入门笔记------------Day3
主要是复习前面的基本内容,以及函数的概念 组合数 #include<stdio.h> int f(int n) { int m=1; for(int i=1;i<=n;i++) m* ...
- 手机移动端alert替换方案
//alert ;(function () { var AlertBox = function (options){ this.defaults = { title:"", cal ...
- WPF 自定义TextBox,可控制键盘输入内容
非原创,整理之前的代码的时候找出来的,可用,与大家分享一下! public class NumbericBoxWithZero : NumericBox { public NumbericBoxWit ...
- [Leetcode][JAVA] Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...
- iOS 开发-- enum与typeof enum用法
一, 两者的用法 枚举类型定义用关键字enum标识,形式为: enum标识符 { 枚举数据表 }; enum用来定义一系列宏定义常量区别用,相当于一系列的#define ** **,当然它后面的标识符 ...
- C#的winform编程入门简单介绍
C#中事件.事件委托.事件的订阅 例子: using System.Timers; Timer t1 = new Timer(); t1.Tick += new EventHandler(XX); p ...
- 【异常】VS中运行HTTP 无法注册URL
参考资料 http://www.java123.net/detail/view-449670.html http://www.cnblogs.com/jiewei915/archive/2010/06 ...
- Spring AOP在函数接口调用性能分析及其日志处理方面的应用
面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...
- Form认证的几点说明
有的页面需要用户认证之后才可以进入,通常都是在Filter的OnActionExecuting方法中我们需要获取当前用户.有两种情况不必登录:1.用户是登录的,也就是认证过的.2.用户上次登录了,但没 ...