shell免交互expect(以ssh实验为例)
admin
2023-01-21 08:01:01
0

内容要点:

  • expect概述

  • expect安装

  • expect基本命令

  • expect语法

  • expect执行方式

  • expect配置案例

一、expect概述

Expect是建立在tcl基础上的一一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助

在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程, 可能会需要输入yes/no、password等信息。为了模拟这种输入,可以使用Expect脚本

二、expect安装

yum install -y expect

三、expect基本命令

send:向进程发送字符串,用于模拟用户的输入

  • 该命令不能自动回车换行,一般要加\r (回车)

expect

  • expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回。

  • 只能捕捉由spawn启动的进程的输出

spawn:启动进程,并跟踪后续交互信息

interact:执行完成后保持交互状态,把控制权交给控制台

Timeout:指定超时时间,过期则继续执行后续指令

  • 单位是:秒

  • timeout -1为永不超时

  • 默认情况下,timeout是10秒

exp_ continue

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

send_ user

  • 回显命令,相当于echo

$argv参数数组

  • Expect脚本可以接受从bash传递的参数可以使用[index $argv n]获得,n从0开始,分别表示第一个,第二个第三个...参数

Expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了

  • expect eof是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记

四、expect语法

单一分支语法

expect"password:"{send "mypassword\r";}

多分支模式语法

expect "aaa" {send“AAA\r"}
expect "aaa" {send“AAA\r"}
expect "aaa" {send“AAA\r"}
Send命令不具备回车换行功能,一般要加\r或\n
expect {
"aaa" {send "AAA\r"}
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"}
}
只要匹配了aaa或bbb或ccc中的任何一个执行相应的send语句后退出该expect语句
expect {
"aaa" {send "AAA";exp_continue}
"bbb" {send "BBB"; exp_continue}
"ccc" {send "CCC"}
}
exp_continue表示继续后面的匹配,如果匹配了aaa,执行完send语句后还要继续向下匹配bbb

五、expect执行方式

已ssh服务为例

直接执行:

#!/usr/bin/expect
#超时时间
set timeout 10
log_file test.log
log_user 1
#参数传入
set hostname [lindex $argv 0]
set password [lindex $argv 1]
#追踪命令
spawn ssh root@$hostname
#捕捉信息并且匹配,免交互执行
expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "password"
        {send "$password\r"}
}
#控制权交给控制台执行
interact

shell免交互expect(以ssh实验为例)

shell免交互expect(以ssh实验为例)

嵌入执行:

#!/bin/bash
hostname=$1
password=$2
#声明免交互过程
/usr/bin/expect<<-EOF
spawn ssh root@$hostname
expect {
        "(yes/no)"
        {send "yes\r";exp_continue}
        "*password"
        {send "$password\r"}
}
expect "*]#"
send "exit\r"
expect eof
EOF
~

     

shell免交互expect(以ssh实验为例)

shell免交互expect(以ssh实验为例)

ssh免交互优化完善:


六、案例:

创建账户、设置密码:

正常控制台交互创建:

[root@service ~]# useradd aaa
[root@service ~]# passwd aaa
更改用户 aaa 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

shell免交互expect(以ssh实验为例)

expect执行:

#!/bin/bash
#创建用户
user=$1
password=$2
useradd $user
/usr/bin/expect <<-EOF
spawn passwd $password
expect {
        "新的 密码"
        {send "$password\r";exp_continue}
        "重新输入新的 密码:"
        {send "$password\r"}
}
EOF

shell免交互expect(以ssh实验为例)

shell免交互expect(以ssh实验为例)

相关内容

热门资讯

台防务部门呼吁通过所谓无人机条... 7月22日上午,国台办举行例行新闻发布会。记者:据报道,台防务部门负责人近日称,呼吁通过行政部门无人...
英媒:为什么世界更相信中国而不... 当下西方世界深陷信任危机,民众对体制普遍失望愤怒。美国全球公信力持续崩塌,多国对华信任度已反超美国。...
“台青e家”平台上线运行,国台... 7月22日,国务院台办举行例行新闻发布会。有记者问:在海峡两岸青年文化月活动期间,国务院台办主任宋涛...
视频丨从“有学上”到“上好学”... 教育强国,基点在基础教育。我国拥有43万所中小学幼儿园、2.2亿在校生、1577万专任教师,建成了世...
“看到这几张脸生理性厌恶!”你... 近期,“对AI脸感到不适”相关话题接连冲上社交平台热搜。打开短视频平台刷微短剧,连续刷几部后,主角个...
今年上半年全国城镇新增就业69... 今天(22日)上午,人力资源社会保障部举行新闻发布会。今年上半年,全国城镇新增就业695万人,同比持...
委内瑞拉强震遇难人数升至534... 当地时间21日,委内瑞拉全国代表大会主席豪尔赫·罗德里格斯通过社交媒体通报,该国6月24日两次强震造...
高考684分花3000元咨询进... 潮新闻客户端 青年特约评论员 曾耀湘图源:视觉中国近日,据齐鲁晚报报道,河北一名2018级考生,因“...
郑州2死2伤火灾系人为纵火 郑州市公安局金水分局对外发布案件通报。通报显示,6月19日21时,郑州市金水区宏明路与柳林路东南角宏...
29岁成都小伙旅行中改道广西救... 7月14日,自发赶往广西救灾的志愿者党鑫蕊,由于劳累过度导致心功能衰竭,在贵港市覃塘区不幸离世,年仅...