首页 > 系统相关 >Linux之expect

Linux之expect

时间:2023-08-20 18:00:28浏览次数:43  
标签:send 192.168 expect Linux yes root localhost

目录

[root@localhost ~]#cat <<EOF
> hello
> hi
> halo
> EOF
hello
hi
halo

Expect

  • 建立在tcl上的一个工具
  • 用于自动化控制和测试
  • 解决shell脚本中交互相关问题

/usr/bin/expect

[root@localhost ~]#rpm -q expect
expect-5.45-14.el7_1.x86_64
[root@localhost ~]#which expect
/usr/bin/expect
[root@localhost ~]#vim test
[root@localhost ~]#cat test
#!/usr/bin/expect
spawn ssh 192.168.174.102

expect {
   "yes/no"   {send "yes\r"; exp_continue}
   "password" {send "123123\r" }


}

#expect eof  #交互结束会回到原先的用户
interact  #交互结束保留在目标用户

[root@localhost ~]#chmod +x test
[root@localhost ~]#./test
spawn ssh 192.168.174.102
The authenticity of host '192.168.174.102 (192.168.174.102)' can't be established.
ECDSA key fingerprint is SHA256:8rTcpr5+eXm4qipF2jv/MRbC424mx9Fu/KjVOEIrgVk.
ECDSA key fingerprint is MD5:e2:1d:87:30:df:a2:ca:b0:71:12:42:b3:40:03:77:8f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.174.102' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Tue Aug 15 18:58:10 2023 from 192.168.174.1

[root@localhost ~]#cat test
#!/usr/bin/expect

set hostname [ lindex $argv 0 ]

spawn ssh $hostname

expect {
   "yes/no"   {send "yes\r"; exp_continue}
   "password" {send "123123\r" }


}

expect eof
#interact
[root@localhost ~]#./test 192.168.174.102
spawn ssh 192.168.174.102
[email protected]'s password: 
Last login: Thu Aug 17 09:41:47 2023 from 192.168.174.100
[root@localhost ~]#
[root@localhost ~]#


  • 定义:是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题

  • Expect概述(与ssh相互配合使用)

    • 建立在tcl之上的工具
    • 用于进行自动化控制和测试
    • 解决shell脚本中交互相关的问题
  • 基本命令

    • 判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
    • 只能捕捉由spawn启动的进程的输出
    • 用于接收命令执行后的输出,然后和期望的字符串匹配
  • send

    • 向进程发送字符串,用于模拟用户的输入
    • 该命令不能自动回车换行,一般要加\r(回车)
  • set

    • 设置超时时间,过期则继续执行后续指令
    • 单位是秒
    • timeout -1表示永不超时
    • 默认情况下,timeout是10秒
  • exp_continue

    • 允许expect继续向下执行指令
  • send_user

    • 回显命令,相当于echo

基本命令:

#脚本解释器
#!/usr/bin/expect(不用.sh结尾)

#spawn 后面通常跟一个Linux执行命令,表示开启一个会话、进程,并跟踪后续交互信息

例:spawn ssh 192.168.8.8

#expect
判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;只能捕捉有swpan启动的进程输出
用于接受命令执行后的输出,然后和期望的字符串匹配

#send
向进程发送字符串,用于模拟用户的输入:该命令不能自动回车换行,一般要加 \r (回车) 或者\n 

```bash
#!/usr/bin/expect

#设置超时时间
set timeout 5

#参数传入
set hostname  [lindex $argv 0]  
#hostname=$1

set password  [lindex $argv 1] 
#password=$2
[root@localhost ~]#rpm -q expect   #先查看是否安装expect,没有安装需要先安装(yum install expect -y)
expect-5.45-14.el7_1.x86_64

[root@localhost ~]#rpm -q tcl
tcl-8.5.13-8.el7.x86_64

[root@localhost ~]#vim test
#!/usr/bin/expect
spawn ssh 192.168.8.106    #启动命令

expect {       #捕捉spawn启动的进程的输出
    "yes/no" { send "yes\r"; exp_continue }  #捕捉yes或no,exp continue代表继续捕捉
    "password" { send "123123\r" }    #继续捕捉

}

#expect eof    #代表结束,结束返回之前终端
interact       #代表结束,留在远程终端

[root@localhost ~]#chmod +x test

标签:send,192.168,expect,Linux,yes,root,localhost
From: https://www.cnblogs.com/mtwm/p/17636708.html

相关文章

  • 靶机 red hat enterprise linux 从收集到提权
    前言:时间2022年5月22日,在B/S架构上通过用户名dus2进行密码爆破后得到了dus2,拿到了普通用户的shell(权限很低),最终目的拿到root的shell来破环整个服务器。linux提权思路归纳   首先开始信息收集,登陆普通用户dsu2       uname-a                    ......
  • Linux文本处理三剑客之grep
    相信大家对于grep都不陌生,或多或少都用过。但大部分人可能都只用过最基本的字符匹配,而稍微复杂一点的用法没有使用过。我们不追求过于复杂的参数用法,而是要了解grep还能干什么,有什么我平常没有用到的功能,从而能够提升我的工作效率。比如我自己,很长一段时间,我都只会用:grep-En......
  • linux redis安装
    第一步:下载redis安装包(root用户,目录/usr/local/src)#wgethttp://download.redis.io/releases/redis-5.0.5.tar.gz第二步:解压压缩包#tar-zxvfredis-5.0.5.tar.gz跳转到redis解压目录下cdr......
  • linux redis setup
    第一步:下载redis安装包(root用户,目录/usr/local/src)#wgethttp://download.redis.io/releases/redis-5.0.5.tar.gz第二步:解压压缩包#tar-zxvfredis-5.0.5.tar.gz跳转到redis解压目录下cdr......
  • redis setup linux redhad
    第一步:下载redis安装包(root用户,目录/usr/local/src)#wgethttp://download.redis.io/releases/redis-5.0.5.tar.gz第二步:解压压缩包#tar-zxvfredis-5.0.5.tar.gz跳转到redis解压目录下cdr......
  • Linux基础命令
    Linux基础命令操作,黑马视频截图1、命令基础一、名词解释总结,名词解释:2、ls命令入门一、名词解释总结,名词解释:3、ls命令的参数和选项一、名词解释组合形式:总结,名词解释:4、cd-pwd命令一、名词解释总结,名词解释:5、相对路径、绝对路径和特殊路径符一、名......
  • Linux驱动编译方法
    编译内核为什么编译驱动前要编译内核?编译驱动的内核要和开发板上的内核一致。因为开发板出厂时预烧录了一个内核,但自己在ubuntu编译是使用的是自己的内核,二者不一致时会导致导入驱动模块时出现问题(如内核污染提示)。内核编译的步骤下面记录内核编译步骤是对应IMX6ULLPRO开......
  • Windows安装Archlinux(WSL2)
    导言对于在Windows中使用Linux系统,有很多种实现方法。最常见的方法就是使用VM虚拟机软件。于是微软推出了WSL(WindowsSubSystemForLinux),初代的WSL1,总体上是在运行时将LinuxSystemCall翻译为NTAPI调用,从而在NT内核基础之上模拟实现Linux内核。也许是因为WSL1靠翻译SystemCa......
  • linux 安装jdk
    (1)下载安装包JDK安装包下载地址:链接:https://pan.baidu.com/s/1Vt0nqNBOVl7Chuap4Gj3tg提取码:9fy2(2)SSH上传工具SSH安装包下载地址:链接:https://pan.baidu.com/s/1TiFqxSJbmxupcjSHmcLLvQ提取码:tbo9(3)安装SSH成功可直接右键,点击【Upload】上传到/usr/local/java目录......
  • 软件测试|Linux三剑客之awk命令详解
    简介awk是一种强大的文本处理工具,在Unix和类Unix系统中广泛使用。它允许您在文本文件中进行复杂的数据处理和格式化输出。awk的名字是根据它的三位创始人Aho、Weinberger和Kernighan姓氏的首字母命名的。本文将详细介绍awk命令的基本用法和一些常见的用例。awk基本语法aw......