1.expect预期交互控制(免人工交互)
expect:基于TCL编写的自动交互式程序,为ftp/SSH等交互过程自动输送预先准备的文件或指令,则无需人工干预
触发的依据是预期会出现的特征提示文本
#yum -y install expect --需要安装(依赖环境TCL包)
2.预期交互实现过程
#expect
>spawn ftp 192.168.8.129 --创建ftp交互登录过程
>expect "):" --预期出现):登录提示
>send "ftp\r" --发送用户名ftp
>expect "Password:" --预期出现验证密码提示
>send "123456\r" --发送密码123456
>expect "ftp>" --预期出现ftp>状态提示
>send "quit\r" --发送退出指令
>exit --退出expect交互环境
3.自动交互
expect 指令文件 --进行加载,从而实现自动交互
#vi mike-ftp.sh --自动上传(免交互ftp上传下载)
spawn ftp 192.168.8.129 --创建ftp交互登录过程
expect "):" --预期出现):登录提示
send "mike\r" --发送用户名ftp
expect "Password:" --预期出现验证密码提示
send "123456\r" --发送密码123456
expect "ftp>"
sed "put install.log\r"
expect "ftp>" --预期出现ftp>状态提示
send "quit\r" --发送退出指令
#expect mike-ftp.sh
4.ftp自动登录脚本:(免交互)
调整执行方式:添加Sha-Bang环境声明
vim mike-ftp.sh
#!/usr/bin/expect
spawn ftp 192.168.8.129 --创建ftp交互登录过程
expect "):" --预期出现):登录提示
send "mike\r" --发送用户名ftp
expect "Password:" --预期出现验证密码提示
send "123456\r" --发送密码123456
expect "ftp>"
sed "put install.log\r"
expect "ftp>" --预期出现ftp>状态提示
send "quit\r" --发送退出指令
chmod +x mike-ftp.sh &&./mike-ftp.sh 执行脚本
例子应用:expect实现ssh免登陆交互
编写一个expect脚本,实现ssh登录自动交互
目标主机192.168.8.130,用户名mike 密码123456
登录后在目标主机建立测试文件/tmp/mike.txt
#!/usr/bin/expect
set host 47.244.15.241 --定义变量
set user root
set password "Hu910921"
spawn ssh $user@$host --创建交互式进程
expect "password:" { send "$password\r" } --自动发送密码
expect "\[$user\@"{ send "pwd > /tmp/$user.txt;exit\r"]" --发送交互式指令
expect eof --结束指令
5.例子:SSH免交互,查看磁盘分区df -h
(指定用户登录)
yum -y install expect
vi expect_ssh.sh
#!/usr/bin/expect
set ip 47.244.15.241
set user root
set pass "Hu910921"
spawn ssh $user@$ip
expect "password:" {send "$pass\r"}
expect "$user@*" {send "df -h\r"}
expect "$user@*" {send "exit\r"}
expect eof
spawn:执行一个命令
expect "":匹配输出的内容
\r:可以理解为回车