问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

expect工具详解:自动化处理交互式命令的利器

创作时间:
作者:
@小白创作中心

expect工具详解:自动化处理交互式命令的利器

引用
CSDN
1.
https://blog.csdn.net/ZHX2285/article/details/143079725

一.expect工具介绍

在写脚本的过程当中不可避免的需要去写交互式命令。那么如何让交互式命令在脚本中自动执行?使用expect工具。expect工具的作用是捕获交互式的输出,自动执行交互式命令。

1.spawn命令

作用:指定捕获哪个命令的输出,即指定捕获哪个交互式命令。spawn命令是expect命令提供给我们的,这个命令可以用来去捕获交互式命令产生的输出。语法:spawn 命令

2.expect命令

作用:指定捕获的信息,即指定捕获这个交互式命令的哪部分提示信息。语法:expect 提示信息

3.send命令

作用:向交互式命令发送指令,向交互式命令发送指定信息。语法:send 参数

案例:捕获passwd命令的输出,实现自动设置密码

首先需要检测机器中是否含有expect工具,如果没有这个expect工具需要去安装这个工具。

expect工具的使用方法:

  1. 首先指定命令解释器,即#!/usr/bin/expect
  2. 使用spawn去指定什么命令
  3. expect去指定捕获这个命令输出的什么信息
  4. send去指定向交互式命令发送指令
  5. \n换行符,相当于回车

需要注意的是,这些命令本身不是shell命令,如果拿bash去执行这个命令就会报错。

执行expect 文件以及验证expect是否执行成功的操作:

可以在expect文件中去设定等待捕获时间,当超过这个捕获时间之后,就结束捕获流程。

案例:结合shell脚本去使用

在shell脚本中使用expect工具的示例:

在shell脚本中执行expect工具实现交互式命令自动执行的操作。

案例:配置免密ssh

生成密钥的操作:

拷贝密钥的操作,在拷贝密钥的时候,需要输入目的主机的密码。而这就是一个交互式命令,将来这条命令在脚本的时候,我们就可以借助expect工具,去自动执行免密ssh的操作。

当192.168.183.10的机器第一次去连接192.168.183.11的机器的时候,需要捕获的信息的192.168.183.10的机器第二次去连接192.168.183.12的机器的时候,需要捕获的信息是不同的。面对上面这个情况,怎么处理呢?

如果192.168.183.10的机器接收到对方机器的密钥信息之后,就会把密钥信息保存到这个文件中,所以我刚才去连接哪个183.11的时候,没有yes或者no的提示了。

为了方便expect信息的统一捕获,我们可以先把这个文件给删了。

可以在192.168.183.10的机器上写这样一个脚本文件,如果存在konwn_hosts就先把这个文件给删了,

可以在192.168.183.11的机器上创建密钥对

-f是指定私钥文件的存放地址,-N是指定私钥文件的密码

创建密钥对的自动化操作。

192.168.183.10对192.168.183.11的机器的免密ssh脚本。

此时192.168.183.10的机器能实现对192.168.183.11的免密操作。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号