shell免交互expect

发布时间 2023-07-15 14:35:53作者: 枫飘过的天1

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:可以理解为回车