始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

利用expect脚本自动管理linux主机

发布时间:  2012/9/3 16:52:19
自动登录管理linux主机
  1. #!/usr/bin/expect -f   
  2.    
  3. set port port_no   
  4. set user user_name   
  5. set host host_name   
  6. set password my_password   
  7. set timeout -1   
  8.    
  9. spawn ssh -p$port $user@$host   
  10. expect "*assword:*"   
  11. send "$password\r"  
  12. expect "*]#" send "ifconfig \r" expect "*]#" send "exit\r"
  13. expect eof 

自动上传文件 

  1. #!/usr/bin/expect -f 
  2. #输入分析仪ip以及需要上传的文件名和TSMIS_ROOT环境变量 
  3. set ip [lindex $argv 0] 
  4. set localfile [lindex $argv 1] 
  5. set  TSMIS_ROOT  [lindex $argv 2]   
  6. #scp拷贝需要传输的文件到指定目录,并且跳过手动输入部分 
  7. spawn scp -r $localfile root@$ip:$TSMIS_ROOT/tmp/$localfile 
  8. set timeout 300 
  9. expect { 
  10.  "yes/no"  {send "yes\r" ; exp_continue}  
  11.  "*assword:" {send "111111\n"} 
  12.  } 
  13. set timeout 300 
  14. send "exit\r" 
  15. expect eof 

 

expect的具体用法

 

  1. #!/usr/bin/expect 
  2. set timeout 30 
  3.  
  4. spawn ssh -l username 192.168.1.1 
  5.  
  6. expect "password:" 
  7.  
  8. send "ispass/r" 
  9.  
  10. interact 

 

1  [#!/usr/bin/expect]

这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。

注意:这一行需要在脚本的第一行。

 

2. [set timeout 30]

基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒


3. [spawn ssh -l username 192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。


它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

 

4. [expect "password:"]


这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

 

5. [send "ispass/r"]


这里就是执行交互动作,与手工输入密码的动作等效。

温馨提示: 命令字符串结尾别忘记加上 “/r”,如果出现异常等待的状态可以核查一下。

 

6. [interact]


执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]

 批量处理linux主机~

这个是expect脚本~

这个是要让远程执行的命令集

下面是批量执行~

 

 

 

 

 

上面脚本中的自动交互用到了expect,那么什么是expect呢?

expect是一个基于Tcl的用于自动交互操作的工具语言,它适合用来编写需要交互的自动化脚本,比如上面提到的SSH输入用户名密码,自动FTP等等场景。

 

除了具有Tcl的语法,expect提供了几个常用的命令:

1. send

用来发送一个字符串,比如 send "hello world"。

初始情况下,这个字符串会发送到标准输出。如果你用的是max OSX或者linux,可以在Terminal下直接输入expect命令并回车,就进入了expect交互环境,此时,输入send "hello world"就可以看到结果。

一旦你的程序已经与其他程序进行交互,字符串就会被发送到其他程序那里。如上面的例子脚本中,我们调用send ”$password\r"就是把密码发送给SSH连接的服务器端指定端口。

 

2. expect

与send相反,expect用来等待你所期望的字符串。比如expect "hello"

在expect后面跟的字符串中,你可以指定一个正则表达式。

expect会一直等待下去,除非收到的字符串与预期的格式匹配,或者到了超期时间。

 

3. spawn

spawn用来启动一个新的进程,比如上面的spawn ssh -D $port $user@$host,Expect会执行命令“ssh -D $port $user@$host”。

在交互式的场景中,当你输入命令后,可能服务器端会返回一些操作提示符,以让你输入命令。Expect提供了这样三个常用的命令,spawn, expect和send,恰好满足这种需要。把它们结合起来使用,可以实现很多简单的自动化脚本。

 

其它常用的命令还有:interact,比如你通过脚本自动连接到了某个ftp,并输入了用户名密码,此时需要人工输入一些命令,就可以使用interact命令,它会把脚本的控制权交给用户;sleep,等待多少秒等等。

 

由于expect是从Tcl继承下来的,所以也支持Tcl的语法和命令,比如变量声明、流程控制等等。

 

上面脚本的一些解释:

1. set timeout 300:设置超时时间300s。如果设为-1,代表永不超时。

2. expect eof:等待接受文件结束符。


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线