-
Expect
2021-01-07 21:10:31Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。 二、Expect工作原理 从...一、Expect概述
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。
二、Expect工作原理
从最简单的层次来说,Expect的工作方式象一个通用化脚本工具。用来实现计算机之间需要建立连接时进行特定的登录会话的自动化。
脚本由一系列expect-send对组成:expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。
三、安装
[root@localhost ~]# yum -y install expect tcl tclx tcl-devel
四、示例(解决人机交互的问题)
1.示例1:通过expect解决ssh交互问题(登录验证免交互)[root@localhost ~]# vim ex.exp #!/usr/bin/expect spawn ssh root@10.8.161.173 //spawn expect 内部命令,启动一个shell程序。 expect { //expect 期望哪些内容 "yes/no" { send "yes\r" ; exp_continue } //yes/no 就send发送 yes ,\r 表示回车 ;exp_continue,跳过循环,就继续下一条语句。 "password:" { send "centos\r" }; //password 就send发送密码 } interact //interact 允许用户交互,保留对话 [root@localhost ~]# expect ex.exp //运行脚本命令为expect spawn ssh root@10.8.161.173 root@10.8.161.173's password: [root@localhost ~]# ip a //远程登录成功,查看ip 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:58:e1:55 brd ff:ff:ff:ff:ff:ff inet 10.8.161.173/24 brd 10.8.161.255 scope global noprefixroute dynamic ens33 valid_lft 257991sec preferred_lft 257991sec inet6 fe80::b253:d870:7f74:52c8/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::7801:a245:f982:a228/64 scope link noprefixroute valid_lft forever preferred_lft forever
2.示例2:expect实战:公钥推送
[root@localhost ~]# vim expect.sh #!/bin/bash #创建一个IP地址文件 >ip.txt #检测expect是否安装 rpm -q expect &> /dev/null if [ $? -ne 0 ];then yum install -y expect tcl tclx tcl-devel fi #检测公钥是否创建 if [ ! -f ~/.ssh/id_rsa ];then ssh-keygen -P " " -f ~/.ssh/id_rsa fi ip=10.8.161.173 #ping测试主机是否在线 ping -c1 -W1 $ip &>/dev/null if [ $? -eq 0 ];then echo "$ip" >> ip.txt /usr/bin/expect <<-EOF set timeout 10 spawn ssh-copy-id $ip expect { "yes/no" {send "yes\r";exp_continue} "password:" {send "centos\r"}; } expect eof EOF fi
[root@localhost ~]# bash expect.sh spawn ssh-copy-id 10.8.161.173 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system. (if you think this is a mistake, you may want to use -f option) expect: spawn id exp6 not open while executing "expect eof"
[root@localhost ~]# ssh root@10.8.161.173 Last login: Thu Jan 7 20:43:46 2021 from 10.8.161.66 [root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:58:e1:55 brd ff:ff:ff:ff:ff:ff inet 10.8.161.173/24 brd 10.8.161.255 scope global noprefixroute dynamic ens33 valid_lft 244538sec preferred_lft 244538sec inet6 fe80::b253:d870:7f74:52c8/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever inet6 fe80::7801:a245:f982:a228/64 scope link noprefixroute valid_lft forever preferred_lft forever
拓展:
-
expect
2020-02-23 21:49:25yum list| grep expect //查看安装expect没 yum -y install expect //安装expect rpm -ql expectyum list| grep expect //查看安装expect没 yum -y install expect //安装expect rpm -ql expect
收藏数
105,446
精华内容
42,178
-
转行做IT-第8章 类与对象、封装、构造方法
-
软件工程 实践者的研究方法 第21章答案
-
蓝色卡通模板
-
Java仿微博系统实战-架构1.0(Spring Boot2.X)
-
软件工程 实践者的研究方法 第28章答案
-
linux 服务器系统 命令配制与lamp网站搭建环境配制
-
989 数组形式的整数加法
-
性能测试面面观
-
艺妓古典风格餐饮网站模板
-
Java8 Optional
-
韩国某官方教育网站模板
-
【数据分析-随到随学】机器学习模型及应用
-
微信支付2021系列之扫码支付一学就会java版
-
【数据分析-随到随学】数据分析基础及方法论
-
韩国生活用品网上商城网站模板
-
电子书籍阅读网页模板
-
如果自己做事情,一直这样做会有一个缺点
-
JDK环境变量配置.txt
-
hadoop自动化运维工具Ambari应用实践
-
软件工程 实践者的研究方法 第26章答案