自动化交互expect
自动化交互expect
一,介绍
每次服务器控制链接都需要输入密码,很麻烦,每次交互大大延长了时间
因此就有了免交互及自动化交互存在expect
二,安装
yum install expect -y
查看是否安装成功
rpm -qa expect



安装算是完成了
三,ssh链接交互
主机:三台 ---->一台主控制服务器
10.0.0.203 ----mysql服务器
10.0.0.204 -----web服务器

手动链接服务器的话需要实现两次交互操作
我们现在用expect交互
编写kingle.exp文件
#!/uer/bin/expect
#解析开头
spawn ssh root@10.0.0.203 uptime
#执行ssh命令
expect "*password"
#获取字符串
send "123456\n"
#获取到子浮川的时候自动发送密码,\n换行
expect eof
#结束
运行expect脚本
# expect kingle.exp
少了一次密码交互这样

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

传入IP的值 和传入 需要执行的命令
使用shell进行多台内网交互
#########################################################################
# File Name: command.sh
# Author: kingle
# Mail: kingle122@vip.qq.com
# Created Time: 2018年08月03日 星期五 16时44分04秒
#########################################################################
#!/bin/bash
if [ $# -ne 1 ]
#是否传入值
then
echo $"USAGE:$0 cmd"
#输出需要传入命令操作
exit
fi
cmd=$
#传值
for n in
#for 循环调用
do
expect command.exp 10.0..$n "$cmd"
#expect 调用脚本 并且给予值
done
执行脚本
sh commaod.sh

成功 显示两台服务器的负载信息
我们在看一下他的其他信息

实战二,批量发送文件
expect脚本:
#########################################################################
# File Name: fileup.exp
# Author: kingle
# Mail: kingle122@vip.qq.com
# Created Time: 2018年08月03日 星期五 16时44分04秒
########################################################################
#!/usr/bin/expect
if { $argc != } {
puts "usage: expect $argv0 file host dir"
exit
}
set file [lindex $argv ]
#获取数据并传值
set host [lindex $argv ]
set dir [lindex $argv ]
set password "123456"
spawn scp -P22 -rp $file root@$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

显示成功了,,好了我们要集群网络发送了编写脚本
#########################################################################
# File Name: fileup.sh
# Author: kingle
# Mail: kingle122@vip.qq.com
# Created Time: 2018年08月03日 星期五 16时16分12秒
#########################################################################
#!/bin/bash
if [ $# -ne 2 ]
then
echo $"USAGE:$0 file dir"
exit
fi
file=$
dir=$
for n in
do
expect fileup.exp $file 10.0..$n $dir
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

生成本地密钥
全局下发公钥
#########################################################################
# File Name: ssh.exp
# Author: kingle
# Mail: kingle122@vip.qq.com
# Created Time: 2018年08月03日 星期五 16时16分12秒
#########################################################################
#!/usr/bin/expect
if { $argc != } {
send_user "usage: expect.exp file host\n"
exit
}
set file [lindex $argv ]
set host [lindex $argv ]
set password "123456"
spawn ssh-copy-id root@$host
expect {
"yes/no" {send "yes\r";exp_continue}
"*password" {send "$password\r"}
}
expect eof
ssh脚本全局下发
#########################################################################
# File Name: ssh.sh
# Author: kingle
# Mail: kingle122@vip.qq.com
# Created Time: 2018年08月04日 星期六 17时11分23秒
#########################################################################
#!/bin/bash
for n in
do
expect ssh.exp ~/.ssh/id_dsa.pub 10.0..$n
done
执行脚本
就完成了
现在我们看下
配置脚本
uptime.sh
ssh 10.0.0.203 uptime
ssh 10.0.0.204 uptime
不用密码就能交互了
自动化交互expect的更多相关文章
- 使用expect的自动化交互
Q:利用shell脚本实现ssh自动登录远程服务器? A:expect命令 #!/usr/bin/expect spawn ssh root@172.16.11.99 expect "*pa ...
- Shell编程之Expect自动化交互程序
一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...
- Expect自动化交互程序
Expect介绍: 1.什么是Expect Expect是一个用来实现自动化交互功能的软件套件,基于TCL的脚本编程工具语言,方便学习,功能强大. 2.为什么要使用expcet: 当今的企业运维中,自 ...
- linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。
linux自动化交互脚本expect详解 更新时间:2020年10月21日 10:13:20 作者:lendsomething 这篇文章主要介绍了linux自动化交互脚本expect的相 ...
- Shell 编程 免交互 expect
本篇主要写一些shell脚本免交互expect的使用. 概述 Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题. 安装 ...
- python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)
昨日内容回顾 . 百度ai开放平台 . AipSpeech技术,语言合成,语言识别 . Nlp技术,短文本相似度 . 实现一个简单的问答机器人 . 语言识别 ffmpeg (目前所有音乐,视频领域,这 ...
- 图灵机器人,web录音实现自动化交互问答
一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...
- Linux Expect自动化交互脚本简介
相关资料 维基百科:Expect SourceForge:The Expect Home Page TCL脚本言语简介 由于Expect是建立在TCL语言基础上的一个工具,因此首先检查一些TCL常见语 ...
- centos7 自动交互expect 安装使用
1.安装 https://www.cnblogs.com/rocky-AGE-24/p/7256800.html 安装expect命令 两种方式yum安装 yum -y install expect ...
随机推荐
- MySQL性能调优与架构设计——第2章 MySQL架构组成
第2章 MySQL架构组成 前言 麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成, ...
- 如何将一个用utf-8编码的文本用java程序转换成ANSI编码的文本
jdk有一个关于UTF-8的bug所以加了一句 br.skip(1); bugID: http://bugs.java.com/view_bug.do?bug_id=4508058 public st ...
- Func和Action的介绍及其用法
Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. ...
- Django项目运行时出现self.status.split(' ',1)[0], self.bytes_sent,ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
[02/Nov/2018 09:46:51] "GET /new_industry/category HTTP/1.1" 200 2891792 Traceback (most r ...
- 【转】Android android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)
首先我们还是看一些示例:(网易,新浪,百度) 下面我简单的介绍下实现方法:其实就是listview addHeaderView.只不过这个view是一个可以切换图片的view,至于这个vie ...
- .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决
首先网上是有很多解决方案,但是对我这个错误完全没用 如果你们没有环境首先得预装环境如下 1.首先在bing.com下搜索asp.net core download, 然后打开搜索到的信息.NET Do ...
- MVC ASP.NET MVC各个版本的区别
ASP.NET MVC各个版本的区别 Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh t ...
- 最小生成树(kruscal算法)
其实kruscal算法很简单,把边从小到大排一遍,如果加入此边形成环,就不加,知道这棵树有n-1条边. 代码如下(一定要理解): #include<iostream> #include&l ...
- 「CF140C」 New Year Snowmen
题目链接 戳这 贪心+优先队列,只要每次将数量前三大的半径拿出来就好了,用优先队列维护一下 #include<bits/stdc++.h> #define rg register #def ...
- 单链表倒数第K个节点的查找和显示
1.使用一个固定长度队列装链表段,当遍历到链表根时,返回队列头元素. class Node{ int value; Node next; public Node(int value){ this.va ...