加QQ81758415
快捷导航

expect在Linux下的应用

2014-5-6 23:27| 发布者: xlbck| 查看: 79| 评论: 0

摘要: 先看来每段编码:01.#!/usr/bin/expect02.set timeout 3003.spawn *** -l root 192.168.1.18804.expect "password:"05.send "abc123456\r"06.interact 对这6行开展下表述: 第1行[#!/usr/bin/expect]这每行告 ...
先看来每段编码:
01.#!/usr/bin/expect 
02.set timeout 30 
03.spawn *** -l root 192.168.1.188 
04.expect "password:" 
05.send "abc123456\r" 
06.interact
       对这6行开展下表述:
      第1行[#!/usr/bin/expect] 
这每行告诉他电脑操作系统脚本制作里的编码应用那1个shell来实行。这儿的expect我觉得和linux下的bash、windows下的cmd是类别物品。 这每行必须在脚本制作的第一行。 
      第2行[set timeout 30] 
大部分了解英语的都了解它是设定请求超时時间的,如今你要是记牢他的记时企业是:秒 
      第3行 [spawn *** -l username 192.168.1.188] 
      spawn是进到expect自然环境后才能够实行的expect內部指令,如果不是装expect或是立即在默认设置的SHELL下实行是找不着spawn命 令的。因此不要 “which spawn“这类的指令去找spawn指令。就象windows里的dir就是说1个內部指令,这一指令由shell内置,你没法寻找1个dir.com 或 dir.exe 的可执行文件。 它关键的作用是给***运作系统进程加个壳,用于传送互交命令。 
      第4行[expect "password:"] 
这儿的expect都是expect的1个內部指令,有点儿晕吧,expect的shell指令和內部指令是相同的,但并不是1个作用,习惯就好了。这一命 令的含意是分辨之前輸出結果里是不是包括“password:”的字符串,要是有则马上回到,不然就等候过段时间后回到,这儿等候时间就是说前边设定的30 秒 
      第5行[send "abc123456\r"] 
这儿就是说实行互交姿势,与手工制作输入验证码的姿势等效。 
温馨提醒: 指令字符串末尾别忘了再加“\r”,要是发现异常等候的情况能够审查一下下。 
      第6行[interact] 
实行进行后维持互交情况,把决策权交到控制面板,这一那时候就能够手工劳动了。如果不是这几句登陆进行之后撤出,而并不是留到远程控制终端设备上。
      在Linux下,实行***登录或是是scp拷贝文档的那时候能够应用到该指令,建立全自动输入验证码。
      实例1:远程控制运行命令
01.#!/usr/bin/expect -f 
02.set timeout 30 
03.spawn *** -l root 192.168.1.188 
04.expect { 
05."yes/no" { send "yes\r";exp_continue } 
06."password:" { send "abc123456\r" } 
07.} 
08.expect -re "\](\$|#) " 
09.send "bash /root/test.sh \r" 
10.expect -re "\](\$|#) " 
11.send "exit\r"
       该编码的作用是实行远程服务器上的/root/test.sh脚本制作,主要参数“-re”是配对正则表达式。能够写几行send,实行好几个指令。该脚本制作的另这种写法有哪些
01.#!/bin/bash
02.expect -c "
03.spawn *** root@192.168.1.188 \"ifconfig;whoami;pwd;echo hello;\"
04.expect {
05.    \"*assword\" {set timeout 30; send \"abc123456\r\";}
06.    \"yes/no\" {send \"yes\r\"; exp_continue;}
07.      }
08.expect eof09."  
     主要参数“-c”就是指在命令行实行expect。把要实行的指令用分号分隔了。而且实行全过程中沒有shell提示符的,有兴趣爱好的你能检测下。
       实例2:大批量解决
       在必须管理方法很多的Linux服务器时,能够那样做:
       1.host.list
01.192.168.1.1 22 root abc1
02.192.168.1.2 22 root abc2
03.192.168.1.3 22 root abc3
04.192.168.1.4 22 root abc4
05.192.168.1.5 22 root abc5
06.192.168.1.6 22 root abc6
07.192.168.1.7 22 root
人们把网络服务器的IP地址、服务器端口、登录名、登陆密码一块儿放到host.list文档里,按行排序。
        下边讨论一下脚本制作文档main.exp
01.#!/usr/bin/expect -f
02.set ipaddress [lindex $argv 0]
03.set port [lindex $argv 1]
04.set username [lindex $argv 2]
05.set passwd [lindex $argv 3]
06.set timeout 30
07.spawn *** $ipaddress -p$port -l$username
08.expect {
09."yes/no" { send "yes\r";exp_continue }
10."password:" { send "$passwd\r" }
11.}
12.expect -re "\](\$|#) "
13.send "bash /root/test.sh \r"
14.expect -re "\](\$|#) "
15.send "exit\r"  
       来做1个while循环系统:whi.sh
01.#!/bin/bash
02.host="host.list"
03.while read line
04.do
05.expect main.exp $line
06.done < $host 
       把左右脚本制作都授予实行管理权限,就就行了。
        实例3:scp文件传送
01.expect -c "
02.spawn scp root@192.168.1.188:/root/file1.tgz /root
03.expect {
04.\"*assword\" {set timeout 300; send \"abc123456\r\";}
05.\"yes/no\" {send \"yes\r\"; exp_continue;}
06.}
07.expect eof
08."  
     一样的基本原理,还可以做循环系统开展大批量管理方法,可以更简单化脚本制作,也很少表明了,有兴趣爱好的同学们能够多试着下。应用expect开展全自动输入验证码登录,基础多用以大批量管理方法。也算是便捷。有关大批量管理方法有多种多样方式,能够在服务器中间创建***信赖体制,还可以免登陆密码登录管理方法等。可以应用***pass(外部命令)这一指令开展带登陆密码在脚本制作里实行全自动输入验证码。


鲜花

握手

雷人

路过

鸡蛋

让创业更简单

  • 反馈建议:hackhl@outlook.com
  • 客服电话:暂时没有
  • 工作时间:周一到周五9点~22点

云服务支持

黑客联盟,快速搜索

关注我们

Copyright 黑客联盟安全防护网  Powered by©  技术支持:    ( 闽ICP备18000419号-1 )