自动化交互expect

一,介绍

    每次服务器控制链接都需要输入密码,很麻烦,每次交互大大延长了时间

因此就有了免交互及自动化交互存在expect

二,安装

    yum install expect -y

    查看是否安装成功

    rpm -qa expect

  

  

  安装算是完成了

三,ssh链接交互

  主机:三台 ---->一台主控制服务器

  10.0.0.203        ----mysql服务器

  10.0.0.204  -----web服务器

  

  手动链接服务器的话需要实现两次交互操作

  我们现在用expect交互

  编写kingle.exp文件

  1. #!/uer/bin/expect
  2. #解析开头
  3. spawn ssh root@10.0.0.203 uptime
  4. #执行ssh命令
  5. expect "*password"
  6. #获取字符串
  7. send "123456\n"
  8. #获取到子浮川的时候自动发送密码,\n换行
  9. expect eof
  10. #结束

  运行expect脚本

  # expect kingle.exp

  少了一次密码交互这样

  

四,实战分析

  实战一 ,交互式执行命令

  expect脚本

  

  1. #########################################################################
  2. # File Name: command.exp
  3. # Author: kingle
  4. # Mail: kingle122@vip.qq.com
  5. # Created Time: 2018年08月03日 星期五 16时21分13秒
  6. #########################################################################
  7. #!/usr/bin/expect
  8. if { $argc != } { #判断传入值个数是不是两个
  9. puts "usage: expect $argv0 ip command"  #报错信息
  10. exit #退出
  11. }
  12. set ip [ lindex $argv ] # 接受ip信息复制给ip
  13. set cmd [ lindex $argv ] # 接收命令赋值给cmd
  14. set password "123456"  #设置密码
  15. spawn ssh root@$ip $cmd  #客户端执行的命令
  16. expect {  #配置交互模块
  17. "yes/no" {send "yes\r;exp_continue"}  #收到yes/no就发送yes交互,并持续接受
  18. "*password" {send "$password\r"}  #收到密码则发送密码
  19. }
  20. expect eof  #结束

  执行结果如下

  传入IP的值  和传入 需要执行的命令

  使用shell进行多台内网交互

  

  1. #########################################################################
  2. # File Name: command.sh
  3. # Author: kingle
  4. # Mail: kingle122@vip.qq.com
  5. # Created Time: 2018年08月03日 星期五 16时44分04秒
  6. #########################################################################
  7. #!/bin/bash
  8. if [ $# -ne 1 ]
  9. #是否传入值
  10. then
  11. echo $"USAGE:$0 cmd"
  12. #输出需要传入命令操作
  13. exit
  14. fi
  15. cmd=$
  16. #传值
  17. for n in
  18. #for 循环调用
  19. do
  20. expect command.exp 10.0..$n "$cmd"
  21. #expect 调用脚本 并且给予值
  22. done

执行脚本

sh commaod.sh

成功 显示两台服务器的负载信息

我们在看一下他的其他信息

实战二,批量发送文件

  expect脚本:

  

  1. #########################################################################
  2. # File Name: fileup.exp
  3. # Author: kingle
  4. # Mail: kingle122@vip.qq.com
  5. # Created Time: 2018年08月03日 星期五 16时44分04秒
  6. ########################################################################
  7. #!/usr/bin/expect
  8. if { $argc != } {
  9. puts "usage: expect $argv0 file host dir"
  10. exit
  11. }
  12. set file [lindex $argv ]
  13. #获取数据并传值
  14. set host [lindex $argv ]
  15. set dir [lindex $argv ]
  16. set password "123456"
  17. spawn scp -P22 -rp $file root@$host:$dir
  18. #执行命令
  19. expect {
  20. "yes/no" {send "yes\r" ;exp_continue}
  21. "*password" {send "$password\r"}
  22. }
  23. expect eof

我们发送文件看看

expect fileup.exp /etc/hosts 10.0.0.203 /home

显示成功了,,好了我们要集群网络发送了编写脚本

 

  1. #########################################################################
  2. # File Name: fileup.sh
  3. # Author: kingle
  4. # Mail: kingle122@vip.qq.com
  5. # Created Time: 2018年08月03日 星期五 16时16分12秒
  6. #########################################################################
  7. #!/bin/bash
  8. if [ $# -ne 2 ]
  9. then
  10. echo $"USAGE:$0 file dir"
  11. exit
  12. fi
  13. file=$
  14. dir=$
  15. for n in
  16. do
  17. expect fileup.exp $file 10.0..$n $dir
  18. done

使用脚本执行命令

sh fileup.sh fileup.sh /tmp

 

我看一下是否成功了呢

 

可以看到成功额,不过我的服务器名字一样不好看呢

这样就成功了

我们结合上面的两个来实战一下全网络安装系统

我们编写个安装脚本

全集群下载源码包

wget -P /root/opt http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

把这个文件发放到整个局域网

查看下局域网是否存在

然后通过第一个脚本进行执行命令

注意执行命令用source

我们查看一下

  

已经下好了

实战三,ssh面登入交互部署

  ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa &>/dev/null

  

  生成本地密钥

  全局下发公钥

  1. #########################################################################
  2. # File Name: ssh.exp
  3. # Author: kingle
  4. # Mail: kingle122@vip.qq.com
  5. # Created Time: 2018年08月03日 星期五 16时16分12秒
  6. #########################################################################
  7. #!/usr/bin/expect
  8. if { $argc != } {
  9. send_user "usage: expect.exp file host\n"
  10. exit
  11. }
  12. set file [lindex $argv ]
  13. set host [lindex $argv ]
  14. set password "123456"
  15. spawn ssh-copy-id root@$host
  16. expect {
  17. "yes/no" {send "yes\r";exp_continue}
  18. "*password" {send "$password\r"}
  19. }
  20. expect eof

ssh脚本全局下发

  1. #########################################################################
  2. # File Name: ssh.sh
  3. # Author: kingle
  4. # Mail: kingle122@vip.qq.com
  5. # Created Time: 2018年08月04日 星期六 17时11分23秒
  6. #########################################################################
  7. #!/bin/bash
  8. for n in
  9. do
  10. expect ssh.exp ~/.ssh/id_dsa.pub 10.0..$n
  11. done

执行脚本

就完成了

现在我们看下

配置脚本

uptime.sh

ssh 10.0.0.203 uptime

ssh 10.0.0.204 uptime

不用密码就能交互了

自动化交互expect的更多相关文章

  1. 使用expect的自动化交互

    Q:利用shell脚本实现ssh自动登录远程服务器? A:expect命令 #!/usr/bin/expect spawn ssh root@172.16.11.99 expect "*pa ...

  2. Shell编程之Expect自动化交互程序

    一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...

  3. Expect自动化交互程序

    Expect介绍: 1.什么是Expect Expect是一个用来实现自动化交互功能的软件套件,基于TCL的脚本编程工具语言,方便学习,功能强大. 2.为什么要使用expcet: 当今的企业运维中,自 ...

  4. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  5. Shell 编程 免交互 expect

    本篇主要写一些shell脚本免交互expect的使用. 概述 Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题. 安装 ...

  6. python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)

    昨日内容回顾 . 百度ai开放平台 . AipSpeech技术,语言合成,语言识别 . Nlp技术,短文本相似度 . 实现一个简单的问答机器人 . 语言识别 ffmpeg (目前所有音乐,视频领域,这 ...

  7. 图灵机器人,web录音实现自动化交互问答

    一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...

  8. Linux Expect自动化交互脚本简介

    相关资料 维基百科:Expect SourceForge:The Expect Home Page TCL脚本言语简介 由于Expect是建立在TCL语言基础上的一个工具,因此首先检查一些TCL常见语 ...

  9. centos7 自动交互expect 安装使用

    1.安装 https://www.cnblogs.com/rocky-AGE-24/p/7256800.html 安装expect命令 两种方式yum安装 yum -y install expect ...

随机推荐

  1. Unity破解不成功解决方案

    你是不是遇到过Unity新版本出来的时候就急着使用,但是安装好了,却破解不成功的问题(你之前的版本破解过).这是由于你的注册表没有彻底的删除,接下来我们图解如何清理. 1.卸载以前的版本,卸载完了删除 ...

  2. 软件工程:Java实现WC.exe基本功能

    项目相关要求 GitHub地址:https://github.com/3216004716/WC 实现一个统计程序,它能正确统计程序文件中的字符数.单词数.行数,以及还具备其他扩展功能,并能够快速地处 ...

  3. DOM--sql server

    public List<LianHeData> select(int ID) { List<LianHeData> list = new List<LianHeData& ...

  4. MariaDB 数据库迁移

    一.为什么要迁移 我的七月小说站点放在JCloud上,恕我直言,配合我的Aliyun服务器进行数据交互,那是相当的慢,没办法,京东云上面十几块钱的公网ip,也就这样了. 所以我决定把web服务器和数据 ...

  5. 选择性的使用 serialize() 进行序列化

    serialize 非常方便的帮我们创建 URL 编码文本字符串 输出的字符串格式为 a=1&b=2&c=3  直接可用于Url传参 下面介绍一下选择性的序列化某些标签的使用方法 将 ...

  6. 图像中的掩膜(Mask)是什么

    在图像处理中,经常会碰到掩膜(Mask)这个词.那么这个词到底是什么意思呢?下面来简单解释一下. 1.什么是掩膜 首先我们从物理的角度来看看mask到底是什么过程. 在半导体制造中,许多芯片工艺步骤采 ...

  7. 数值限制------c++程序设计原理与实践(进阶篇)

    每种c++的实现都在<limits>.<climits>.<limits.h>和<float.h>中指明了内置类型的属性,因此程序员可以利用这些属性来检 ...

  8. OC自定义文档头部注释

    1.创建文件 IDETemplateMacros.plist 2.向文件里添加内容 具体内容 // 文 件 名:___FILENAME___ // // 版权所有:___COPYRIGHT___ // ...

  9. ORB SLAM2 学习笔记

    cd ~/Documents/demos/ORB_SLAM2 ./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.y ...

  10. 6w5:第六周程序填空题2

    描述 下面程序的输出结果是: destructor B destructor A 请完整写出 class A. 限制条件:不得为 class A 编写构造函数. #include <iostre ...