1expect-正则表达

1)expect 实现无交互登录

expect是一个免费的编程工具语言,用来实现自动和交互式义务举行通讯,而无需人的干预。如:ssh登录,ftp登录等写在一个剧本上,使之自动化完成。

2)安装expect

[root@test ~]# yum -y install expect

3)使用方法

A、界说剧本执行的shell

[root@test ~]# find / -name expect 
/usr/bin/expect

#!/usr/bin/expect

界说的是 expect 可执行文件的链接路径.

Bset timeout 30

设置超时时间,单元是秒,若是设为timeout -1意为永不超时,默认timeout 为10s

Cspawn

spawn 是进入expect 环境后才气执行的内部下令,若是没有装expect或直接在默认的SHELL下执行是找不到spawn下令的。不能直接在默认的shell环境中举行执行主要功效,它主要的功效是给ssh运行历程加个壳,用来通报交互指令。

Dexpect

expect内部下令,主要用来判断输出效果是否包罗某项字符串,没有则立刻返回,否则就守候一段时间后返回,守候时间通过timeout举行设置。

Esend

执行交互动作,将交互要执行的动作举行输入给交互指令。

下令字符串末端要加上"\r",若是出现异常守候的状态可以举行核查。

Fexp_continue

继续执行接下来的交互操作

Ginteract

执行完后保持交互状态,把控制权交给控制台;若是不加这一项,交互完成会自动退出。

,

联博统计接口

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

H、$argv

expect剧本可以接受从bash通报过来的参数,可以使用 [lindex $argv n]获得,n 从 0 最先,划分示意第一个,第二个,第三个……参数。

4)免密码通过 SSH 登录服务器(非秘钥方式)

[root@test shell]# vi ssh.sh 
"password" { send "$passwd\r" }
}
#!/usr/bin/expect
set ip "192.168.0.20"
set name "root"
set passwd "123456"
set timeout 25
spawn ssh $name@$ip
expect {
"yes/no" { send "yes\r";exp_continue }
"password" { send "$passwd\r" }
}
expect "#"  #判断上次输出效果里是否包罗“password:”的字符串,若是有则立刻返回,向下执行;否则就一直守候,直到超时时间到
send "touch /root/test.txt\r"
send "ls /root > /root/test.txt\r"
send "exit\r"
expect eof  #执行完成上述下令后,退出 Expect,把控制权交给控制台,变回手工操作
[root@test shell]# expect ssh.sh 
spawn ssh root@192.168.0.20
root@192.168.0.20's password: 
Last login: Fri Nov 27 00:18:47 2020 from 192.168.0.10
[root@test ~]# touch /root/test.txt
[root@test ~]# ls /root > /root/test.txt
[root@test ~]# exit
登出
Connection to 192.168.0.20 closed.
[root@test shell]#

 注:expect -f ssh.sh 会显示剧本执行不成功的报错信息。

5)批量ssh登录服务器举行治理

[root@test shell]# cat ssh.exp 
#!/usr/bin/expect
set ipaddr [lindex $argv 0]
set passwd [lindex $argv 1]
set timeout 30
spawn ssh root@$ipaddr
expect {
"yes/no" { send "yes\r";exp_continue }
"password" { send "$passwd\r" }
}
expect "#"
send "cd /root\r"
send "rm -rf test.txt\r"
send "exit\r"
expect eof
[root@test shell]# 
Shell剧本通报ip及密码等参数信息:
[root@test shell]# cat login.sh 
#!/bin/bash
echo
for ip in `awk '{print $1}' /root/shell/ip_list.txt`
do
pass=`grep $ip /root/shell/ip_list.txt|awk '{print $2}'`
expect /root//shell/ssh.exp $ip $pass
done
[root@test shell]# 
ip_list.txt文件
[root@test shell]# cat ip_list.txt 
192.168.0.20 123456
[root@test shell]# 
执行剧本
[root@test shell]# sh login.sh 
spawn ssh root@192.168.0.20
root@192.168.0.20's password: 
Last login: Fri Nov 27 00:32:36 2020 from 192.168.0.106
[root@test ~]# cd /root
[root@test ~]# rm -rf test.txt
[root@test ~]# exit
登出
Connection to 192.168.0.20 closed.
[root@test shell]#


小我私家民众号: