zoukankan      html  css  js  c++  java
  • CentOS 下运维自动化 Shell 脚本之 expect

    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 " ; exp_continue}
    //发送yes并回车;exp_continue 表示继续执行
    "password:" {send "passwd "}
    //表接收或理解为发现"password:" 发送passsword并回车
    }
    expect {
    "#" {send "``date`` "}
    //发现#,说明成功登陆操作系统
    }
    send "/etc/init.d/atd restart "
    send "echo '/bin/bash /srv/shell/export.sh' | at now+1hour "
    send "setsid /bin/env python3 /srv/shell/muniao.py "
    send "setsid /bin/env python3 /srv/shell/xiaozhu.py "
    send "touch 'this is a rabbit' "
    send "exit "
    expect eof
    //表示send可以完成发送
    interact
    //表示转给用户操作

    还有俩个注意的地方:双引号里面是单引号、输出形脚本使用interact(eof会将send一个个执行)、需要使用setsid时候关闭窗口并非exit

  • 相关阅读:
    hadoop中namenode发生故障的处理方法
    开启虚拟机所报的错误:VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the program, access all directories the program uses, and access all directories for temporary fil
    Hbase的安装与部署(集群版)
    分别用反射、编程接口的方式创建DataFrame
    用Mapreduce求共同好友
    SparkSteaming中直连与receiver两种方式的区别
    privot函数使用
    Ajax无刷新显示
    使用ScriptManager服务器控件前后台数据交互
    数据库知识
  • 原文地址:https://www.cnblogs.com/itxdm/p/6044219.html
Copyright © 2011-2022 走看看