自动化交互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 [email protected]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: [email protected]
 5 #    Created Time: 2018年08月03日 星期五 16时21分13秒
 6 #########################################################################
 7 #!/usr/bin/expect
 8 if { $argc !=2 } {  #判断传入值个数是不是两个
 9     puts "usage: expect $argv0 ip command"  #报错信息
10     exit #退出
11 }
12 set ip [ lindex $argv 0 ] # 接受ip信息复制给ip
13 set cmd [ lindex $argv 1 ] # 接收命令赋值给cmd
14 set password "123456"  #设置密码
15 spawn ssh [email protected]$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: [email protected]
 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 1
14 fi
15 cmd=$1
16 #传值
17 for n in 203 204
18 #for 循环调用
19 do
20     expect command.exp 10.0.0.$n "$cmd"
21 #expect 调用脚本 并且给予值
22 done        

执行脚本

sh commaod.sh

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

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

实战二,批量发送文件

  expect脚本:

  

#########################################################################
#    File Name: fileup.exp
#    Author: kingle
#    Mail: [email protected]
#    Created Time: 2018年08月03日 星期五 16时44分04秒
########################################################################
#!/usr/bin/expect
if { $argc != 3 } {
    puts "usage: expect $argv0 file host dir"
    exit
}
set file [lindex $argv 0]
#获取数据并传值
set host [lindex $argv 1]
set dir [lindex $argv 2]
set password "123456"
spawn scp -P22 -rp $file [email protected]$host:$dir
#执行命令
expect {
    "yes/no" {send "yes\r" ;exp_continue}
    "*password" {send "$password\r"}
}
expect eof

我们发送文件看看

expect fileup.exp /etc/hosts 10.0.0.203 /home

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

 

 1 #########################################################################
 2 #    File Name: fileup.sh
 3 #    Author: kingle
 4 #    Mail: [email protected]
 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 1
12 fi
13 file=$1
14 dir=$2
15 for n in 203 204
16 do
17     expect fileup.exp $file 10.0.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: [email protected]
 5 #    Created Time: 2018年08月03日 星期五 16时16分12秒
 6 #########################################################################
 7 #!/usr/bin/expect
 8 if { $argc != 2 } {
 9     send_user "usage: expect.exp file host\n"
10     exit
11 }
12 set file [lindex $argv 0]
13 set host [lindex $argv 1]
14 set password "123456"
15 spawn ssh-copy-id  [email protected]$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: [email protected]
 5 #    Created Time: 2018年08月04日 星期六 17时11分23秒
 6 #########################################################################
 7 #!/bin/bash
 8 for n in 203 204
 9 do
10     expect ssh.exp ~/.ssh/id_dsa.pub 10.0.0.$n
11 done

执行脚本

就完成了

现在我们看下

配置脚本

uptime.sh

ssh 10.0.0.203 uptime

ssh 10.0.0.204 uptime

不用密码就能交互了

原文地址:https://www.cnblogs.com/kingle-study/p/9420206.html

时间: 2024-10-10 23:33:04

自动化交互expect的相关文章

expect实现自动化交互(转载)

综述:expect主要包含三部分,spawn,expect和send spawn实现交互命令的劫持,是自动化交互的基础:然后可以用expect来进行结果查询: expect实现对交互命令输出的解析,得到关键字的查询,如password,user,然后停止,等待交互: send对解析字段内容尽心输入:如password,user,并用\r结束,停留在交互界面:interact. 一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时

自动化交互程序Expect应用实践

Expect自动化交互程序应用实践 1.Expect简介 1.1什么是Expect Expect第一个用来实现自动化交互功能的软件套件,是基于TCL的脚本编程工具语言,方便学习,功能强大. 1.2为什么要使用Expect 在现在的企业运维中,自动化运维已经成为运维的主流趋势,但是在很多情况下,执行系统命令或程序时,系统需要以交互式的形式要求运维人员输入指定的字符串,之后才能继续执行命令.例如,为用户设置密码时,一般情况下需要手工输入2次密码.ssh远程连接服务器时需要输入yes和密码信息,才能连

自动化交互输入密码,进行远程文件复制

此脚本功能主要是找到/data1到/data11下面在当前时间一天以外的所有文件,并复制到另外一台新机器上面. 注意:重点检验自动化交互输入密码,进行远程文件复制功能 #!/usr/bin/pyth #coding=utf-8  #字符编码 import os  #os模块 import pexpect #自动交互模块 import time #导入时间模块 dir_name=os.popen("ls -l / |grep 'data[0-9]\{1,2\}'|awk '{print $NF}'

实现真正的自动化,expect脚本语言使用

实现真正的自动化,expect脚本语言使用 expect中的几个重要句子: expect的核心是spawn expect send set spawn 调用要执行的命令 expect 等待命令提示信息的出现,也就是捕捉用户输入的提示: send 发送需要交互的值,替代了用户手动输入内容 set 设置变量值 interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了.如果没有这一句登录完成后会退出,而不是留在远程终端上. expect eof 这个一定要加,与spawn

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

一.图灵机器人 介绍 图灵机器人是以语义技术为核心驱动的人工智能公司,致力于"让机器理解世界",产品服务包括机器人开放平台.机器人os和场景方案.\ 官方地址为: http://www.tuling123.com/ 使用 首先得注册一个账号,或者使用第3方登录,都可以. 登录之后,点击创建机器人 机器人名称,可以是自己定义的名字 选择网站->教育学习->其他 输入简介 创建成功之后,点击终端设置,拉到最后. 可以看到api接入,下面有一个apikey,待会会用到 右侧有一个

expect 自动化交互软件

一.expect简介 expect是基于TCL的相对简单的一种免费的脚本编程工具语言,用来实现自动和交互式任务程序进行通信,无需人的手工干预,如:SSH.FTP等.这些程序正常情况下都需要手工进行交互,而使用expect就可以模拟人手工交互的过程,实现自动和远端程序的交互,从来达到自动化运维的目的. 官方解释:expect是一个用来实现自动交互功能的软件套件(expect is a software suite for automating interactive tools) expect支持

expect自动化交互脚本(二)

紧接着上篇脚本进行拆分,分析里面的每个单词以及参数,解开交互的面纱,下面看脚本 #!/bin/expect spawn ssh [email protected] expect {       "yes/no"     {send "yes\r";exp_continue}  ##匹配到yes/no就自动输入yes,继续往下匹配       "*password"    {send "root\r"}        ##匹配到

expect自动化交互脚本(三)

接着写一个稍微复杂点的脚本,分发文件到指定服务器脚本. 首先我们要知道远程分发文件的命令格式 scp 源文件 验证用户@远程主机:远程目录 [[email protected] ~]# scp auto_yes.exp [email protected]:/tmp/ 需求就是通过脚本来实现发送,不需要输入密码,也就是验证用户是固定的还有密码是固定的,其他的主机IP和目的路径是不固定的,我们通过设置为位置变量来实现自定义化.最终实现的效果: [[email protected] ~]# expec

与bash script脚本自动化交互

如果bash脚本中一些命令需要手工输入进行交互的时候,那么脚本的自动化就没法进行下去.比如:ssh somehost需要输入用户名和密码,脚本运行到这个命令后,便会停止,等待用户输入. 如果在简单情景下,比如只需要用户输入一次,即一次性交互时,可以直接这样: # ... some directives here # Remove the machine, confirming "y" when asked by docker-machine echo 'y' | docker-mach