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

一、预备知识:

1、在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符。(“echo -eprint效果相同”)
  • 在 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. AngularJS是什么

    先标明来源: https://code.angularjs.org/1.3.15/docs/guide/introduction 也就是官网针对1.3.15版的说明 What Is Angular? ...

  2. 用sql语句清除日志

    DUMP TRANSACTION [数据库] WITH NO_LOGBACKUP LOG [数据库] WITH NO_LOGDBCC SHRINKDATABASE([数据库])

  3. Ubuntu下不重装系统安装SSD总结

    一.要想给自己的机子装个固态,但又不想重装系统,各种配置,那么就要先把自己的系统从HDD复制到SSD上,这里说下我的情况.我的HDD 是500G ubuntu系统,安装的时候没有分区,默认是dev/s ...

  4. 【dubbo】zookeeper搭建

    依赖java JDK,需提前安装1.6及以上版本 1.下载zookeeper (3.4.9) 2.设置配置文件\zookeeper-3.4.9\zookeeper-3.4.9\conf\zoo.cfg ...

  5. java内存泄漏

    java内存泄漏主要分成两个方面: (1)堆中申请的空间没有被释放 (2)对象已不在被使用,但是仍然存在在内存当中 以下集中情况可能会导致内存泄漏 (1)静态集合的使用hashmap和vector,静 ...

  6. windows 录音程序(一)

    (一)概述 1.依赖条件:winmm.lib 2.步骤: (1)打开设备 -----  waveInOpen(打开一个音频输入设备): (2)开始录音 ----- waveInStart开始录音: ( ...

  7. cocos2d-x项目实现android视频播放参考链接

    http://blog.csdn.net/xiaominghimi/article/details/6870259 http://blog.csdn.net/kaitiren/article/deta ...

  8. [置顶]PADS PCB功能使用技巧系列之NO.003- 如何统一修改元件标号字体?

    LAYOUT完毕后进行元件标号字体调整时,你是否试图用Select Document+Select All来选定所有标号?可结果却并不令人满意. (1)在Layout中,选择菜单栏Edit -> ...

  9. 界面显示两个ListView

    1.List界面布局 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:an ...

  10. dp跟px的互相转换

    一 获取手机屏幕的密度 1 获取屏幕的宽和高,然后根据 直角三角形的 a边的平方+b边的平方=c边的平方 得到另一条边的长:然后除以 ,屏幕的尺寸,就是 手机的密度destity 2 根据上下文获取c ...