服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|

服务器之家 - 服务器系统 - Linux - linux中expect的介绍与使用示例

linux中expect的介绍与使用示例

2021-12-22 16:32Lingxian_Kong Linux

expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录。下面这篇文章主要介绍了linux中使用expect的方法示例,需要的朋友可以参考借鉴,下面来一起学习学习吧。

一、概述

我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员 的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。 Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。 :)

Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。

二、Expect工作原理

从最简单的层次来说,Expect的工作方式象一个通用化的Chat脚本工具。Chat脚本最早用于UUCP网络内,以用来实现计算机之间需要建立连接时进行特定的登录会话的自动化。

Chat脚本由一系列expect-send对组成:expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。例如下面的 Chat脚本实现等待标准输出出现Login:字符串,然后发送somebody作为用户名;然后等待Password:提示符,并发出响应 sillyme。

引用:Login: somebody Password: sillyme

这个脚本用来实现一个登录过程,并用特定的用户名和密码实现登录。

Expect最简单的脚本操作模式本质上和Chat脚本工作模式是一样的。

三、一个例子:

?
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]  //接收第一个参数,并设置IP
set password [lindex $argv 1 ] //接收第二个参数,并设置密码
set timeout 10     //设置超时时间
spawn ssh root@$ip  //发送ssh请滶
expect {     //返回信息匹配
 "*yes/no" { send "yes\r"; exp_continue} //第一次ssh连接会提示yes/no,继续
 "*password:" { send "$password\r" //出现密码提示,发送密码
}
interact   //交互模式,用户会停留在远程服务器上面.

运行结果:

?
1
2
3
4
root@ubuntu:/home/zhangy# ./test.exp 192.168.1.130 admin
spawn ssh root@192.168.1.130
Last login: Fri Sep 7 10:47:43 2012 from 192.168.1.142
[root@linux ~]#

总结

以上就是关于linux下使用expect示例的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

原文链接:http://lingxiankong.github.io/blog/2014/11/25/linux-expect/

延伸 · 阅读

精彩推荐
  • LinuxLinux系统安全:系统优化及安全配置详细介绍

    Linux系统安全:系统优化及安全配置详细介绍

    作为一个系统管理员,下面我们聊一下基于服务器应用的Linux,由于个人电脑上使用Linux也许不是像服务器上一样,优先追求安全和稳定,因此个人电脑使用...

    Linux教程网3842019-11-07
  • Linux瞄准Linux系统!攻击者改造渗透测试工具Cobalt Strike兼容Linux信标

    瞄准Linux系统!攻击者改造渗透测试工具Cobalt Strike兼容Linux信标

    使用这些信标,攻击者现在可以在Windows和Linux机器上获得持久性和远程命令执行。...

    FreeBuf6422021-09-18
  • LinuxLinux中rsh远程shell命令的使用技巧解析

    Linux中rsh远程shell命令的使用技巧解析

    这篇文章主要介绍了Linux中rsh远程shell命令的使用技巧解析,包括一些rsh由于进程和连接数等方面问题造成的操作失败的解决方法,需要的朋友可以参考下...

    风行水上5772019-06-19
  • Linuxcpio 解压参数

    cpio 解压参数

    解压 cpio文件 cpio -idmv filename.cpio 同样可以解压img文件: cpio -idmv filename.img cpio 备份命令 备份:cpio -covB [file|device] 将数据备份到文件或设备上 还原:cpio ...

    Linux教程网2062020-04-13
  • LinuxLinux下查看nginx apache mysql php的编译参数

    Linux下查看nginx apache mysql php的编译参数

    由于工作的需要,有时候需要在一台不是你参与编译的环境调试环境,这就需要知道nginx,apache,mysql,php的编译参数,以下小方法能快速让你了解默认的服...

    Linux教程网9762021-10-08
  • LinuxLinux 下如何实现 MySQL 数据库每天自动备份定时备份

    Linux 下如何实现 MySQL 数据库每天自动备份定时备份

    备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过...

    Linux公社11892021-09-23
  • Linuxlinux zabbix自定义监控及报警实现过程解析

    linux zabbix自定义监控及报警实现过程解析

    这篇文章主要介绍了linux zabbix自定义监控及报警实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    盗哥泡茶去了2342020-08-21
  • LinuxLinux man命令的具体使用

    Linux man命令的具体使用

    这篇文章主要介绍了Linux man命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    沧海一笑-dj5092020-09-24