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、上传第三方文件储存处

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的更多相关文章

  1. linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  2. 转 如何不耍流氓的做运维之——SHELL脚本

    家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写 SHELL 脚本如何能够不耍流氓. 下面的案例,我们以 MySQL 数据库备份 SHELL 脚本的案例来进行阐述. 不记录 ...

  3. 如何不耍流氓的做运维之-SHELL脚本

    前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓. 下面的案例,我们以MySQL数据库备份SHELL脚本的案例来进行阐述: 不记录日志 ...

  4. Centos下使用php调用shell脚本

    我们在实际项目中或许会遇到php调用shell脚本的需求.下面就用简单案例在Centos环境下实践 准备 查看php.ini中配置是否打开安全模式 //php.ini safe_mode = //这个 ...

  5. Linux运维之shell脚本进阶篇

    一.if语句的使用 1)语法规则 if [条件] then 指令 fi 或 if [条件];then 指令 fi 提示:分号相当于命令换行,上面两种语法等同特殊写法:if[ -f"$file ...

  6. Linux运维之shell脚本

    一.bash漏洞 1)bash漏洞 bash漏洞是控制Linux计算机命令提示符的软件中存在的漏洞. bash是一个为GNU计划编写的Unix shell.它的名字是一系列缩写:Bourne-Agai ...

  7. Linux运维之shell脚本基础知识

    1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...

  8. 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)

    一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...

  9. 运维常用shell脚本之日志清理

    1.创建一个日志清理脚本 #/bin/bash for i in `find /root/.pm2/logs -name "*.log"` do cat /dev/null > ...

随机推荐

  1. Java程序,猜大小游戏

    一个骰子,通常有1.2.3.4.5.6等6种点数.我们将1.2.3记作“小”,将4.5.6记作“大”.猜中显示“猜对了”,猜错记作“猜错了”之类的字样.本程序可以用Java实现. import jav ...

  2. Mini projects #8–RiceRocks

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  3. Unity3d中Update()方法的替身

    在网上看到一些资料说Unity3d的Update方法是如何如何不好,影响性能.作为一个菜鸟,之前我还觉得挺好用的,完全没用什么影响性能的问题存在.现在发现确实有很大的问题,我习惯把一大堆检测判断放在U ...

  4. WP7系统托盘和应用程序栏

    (一)系统托盘和应用程序栏系统托盘(1)显示系统级别的状态信息(2)Apps能隐藏和显示系统托盘Micosoft.Phone.Shell.SystemTray.IsVisible=true;应用程序栏 ...

  5. Eclipse侧边栏Outline设置字体

    Eclipse的Outline,Project Explorer,Call Hierarchy等小窗口是很方便的功能,但是遇到函数名或文件名很长的情况,就只能显示前半段.尽管Eclipse的自定义程度 ...

  6. cobbler配置

    :ks脚本关闭pxe,这样就不会重复安装 sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/settings 6:TFTP服务器 ...

  7. XCAT在虚拟机上部署系统

    xcat更新到2.13了,老的manual很多都没用了.前一整子居然没搞成功,只好再来试一次. 官网也搬到了xcat.org.首先就是下core和dep包 分别是 xCAT Core Packages ...

  8. 骨骼动画的实现(OpenGL实现)

    人物模型动画一直是游戏中最重要的组成部分, 因此这里我们研究骨骼动画是如何实现的. 原理 首先模型通常是由多个三角形形成的网格构成, 每个三角形有三个顶点, 因此动画的根本原理就在于不同时间内为每个顶 ...

  9. Android 客户端设计之解决方案

    解决方案,是正对与需求来谈的.一个抽象的需求,需要一个较为上层抽象的解决方案来处理,这是病和药的关系.但是一个解决方案,可能会包含多个功能,每个功能都是解决方案上的一个节点.一个优秀的解决方案必然需要 ...

  10. .net笔记

    一.垃圾回收 1.运行.NET应用程序时,程序创建出来的对象都会被CLR跟踪, 2.哪些对象还会被用到(存在引用关系):哪些对象不会再被用到(不存在引用关系),CLR都是有记录的. 3.CLR会整理不 ...