一,安装expect

  1. yum install expect

其实expect根bash形势上差不多的.

二,实例

1,ssh实现自动登录,并停在登录服务器上

  1. #!/usr/bin/expect -f
  2. set ip [lindex $argv 0 ]     //接收第一个参数,并设置IP
  3. set password [lindex $argv 1 ]   //接收第二个参数,并设置密码
  4. set timeout 10                   //设置超时时间
  5. spawn ssh root@$ip       //发送ssh请求
  6. expect {                 //返回信息匹配
  7. "*yes/no" { send "yes\r"; exp_continue}  //第一次ssh连接会提示yes/no,继续
  8. "*password:" { send "$password\r" }      //出现密码提示,发送密码
  9. }
  10. interact          //交互模式,用户会停留在远程服务器上面.

运行结果如下:

  1. root@ubuntu:/home/zhangy# ./test.exp 192.168.1.130 admin
  2. spawn ssh root@192.168.1.130
  3. Last login: Fri Sep  7 10:47:43 2012 from 192.168.1.142
  4. [root@linux ~]#

这个例子有统一的接口,根据IP和密码可以连接到不同的机器.如果你嫌输入IP和密码麻烦,看下面的例子

  1. #!/usr/bin/expect -f
  2. set ip 192.168.1.130
  3. set password admin
  4. set timeout 10
  5. spawn ssh root@$ip
  6. expect {
  7. "*yes/no" { send "yes\r"; exp_continue}
  8. "*password:" { send "$password\r" }
  9. }
  10. interact

运行结果如下:

  1. root@ubuntu:/home/zhangy# ./web.exp
  2. spawn ssh root@192.168.1.130
  3. Last login: Fri Sep  7 12:59:02 2012 from 192.168.1.142
  4. [root@linux ~]#

2,ssh远程登录到服务器,并且执行命令,执行完后并退出

  1. #!/usr/bin/expect -f
  2. set ip 192.168.1.130
  3. set password admin
  4. set timeout 10
  5. spawn ssh root@$ip
  6. expect {
  7. "*yes/no" { send "yes\r"; exp_continue}
  8. "*password:" { send "$password\r" }
  9. }
  10. expect "#*"
  11. send "pwd\r"
  12. send  "exit\r"
  13. expect eof

运行结果如下:

  1. root@ubuntu:/home/zhangy# ./test3.exp
  2. spawn ssh root@192.168.1.130
  3. root@192.168.1.130's password:
  4. Last login: Fri Sep  7 14:05:07 2012 from 116.246.27.90
  5. [root@localhost ~]# pwd
  6. /root
  7. [root@localhost ~]# exit
  8. logout
  9. Connection to 192.168.1.130 closed.

3,远程登录到ftp,并且下载文件

  1. #!/usr/bin/expect -f
  2. set ip [lindex $argv 0 ]
  3. set dir [lindex $argv 1 ]
  4. set file [lindex $argv 2 ]
  5. set timeout 10
  6. spawn ftp $ip
  7. expect "Name*"
  8. send "zwh\r"
  9. expect "Password:*"
  10. send "zwh\r"
  11. expect "ftp>*"
  12. send "lcd $dir\r"
  13. expect {
  14. "*file"  { send_user "local $_dir No such file or directory";send "quit\r" }
  15. "*now*"  { send "get $dir/$file $dir/$file\r"}
  16. }
  17. expect {
  18. "*Failed" { send_user "remote $file No such file";send "quit\r" }
  19. "*OK"     { send_user "$file has been download\r";send "quit\r"}
  20. }
  21. expect eof

运行结果如下:

    1. root@ubuntu:/home/zhangy# ./test2.exp 192.168.1.130 /var/www/www aaa.html
    2. spawn ftp 192.168.1.130
    3. Connected to 192.168.1.130.
    4. 220 (vsFTPd 2.0.5)
    5. Name (192.168.1.130:root): zwh
    6. 331 Please specify the password.
    7. Password:
    8. 230 Login successful.
    9. Remote system type is UNIX.
    10. Using binary mode to transfer files.
    11. ftp> lcd /var/www/www
    12. Local directory now /var/www/www
    13. ftp> get /var/www/www/aaa.html /var/www/www/aaa.html
    14. local: /var/www/www/aaa.html remote: /var/www/www/aaa.html
    15. 200 PORT command successful. Consider using PASV.
    16. 150 Opening BINARY mode data connection for /var/www/www/aaa.html (66 bytes).
    17. 226 File send OK.
    18. 66 bytes received in 0.00 secs (515.6 kB/s)
    19. quit aaa.html has been download
    20. 221 Goodbye.

4.在bash中也可以加expect

#!/bin/bash
/usr/bin/expect <<-EOF
set time
spawn ssh test1@192.168.1.114
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password*" { send "test1\r" }
}
expect "]$"
send "pwd\r"
send "touch express\r"
interact
EOF

Linux之expect的更多相关文章

  1. linux tcl expect 安装(转)

    linux tcl expect 安装 一.Tcl安装 1.  下载:tcl8.4.20-src.tar.gz http://www.tcl.tk/software/tcltk/downloadnow ...

  2. Linux 下 expect 脚本语言中交互处理常用命令

    Linux 下 expect 脚本语言中交互处理常用命令 1. #!/usr/bin/expect 告诉操作系统脚本里的代码使用那一个 shell 来执行.这里的 expect 其实和 Linux 下 ...

  3. Linux安装expect命令

    [Linux安装expect命令]:--expect是在Tcl基础上创建起来的,所以在安装expect前我们应该先安装Tcl.①:tcl安装源码下载:http://www.tcl.tk/softwar ...

  4. linux下expect使用教程

    一.expect介绍 Expect是Unix系统中用来进行自动化控制和测试的软件工具,由DonLibes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fs ...

  5. 用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子

    因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子.真是残缺的可以.没有一段是可以正常运行的.我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚 ...

  6. linux下expect环境安装以及简单脚本测试

    expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下 ...

  7. Linux使用expect实现免手动密码输入,linux免密码登陆

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理.  脚本代码如下:  ###### ...

  8. linux利器expect的使用

    1.什么是expect在做系统管理时,我们很多时候需要输入密码,例如:连接 ssh,连接ftp,那么如何能做到不输入密码,我们需要有一个工具,能代替我们实现与终端的交互,它能够代替我们实现与终端的交互 ...

  9. Linux使用expect实现自动登录的脚本

    前提条件服务器已经安装过tcl和expect, 若未安装:可以先执行 yum  install tcl  expect  进行安装 第一步.编写以下自动登录脚本login.sh ########### ...

随机推荐

  1. IWDG—独立看门狗

    本章参考资料:<STM32F4XX 中文参考手册> IWDG 章节.学习本章时,配合<STM32F4XX 中文参考手册> IWDG 章节一起阅读,效果会更佳,特别是涉及到寄存器 ...

  2. ASP.new GridView获取隐藏列值的几种方法

    解决方法: 原文来自:http://www.tzwhx.com/NewShow/newBodyShow/控件_32933.html 作者:lerit  1.隐藏列前获取数据 看这样一个例子(以下均以此 ...

  3. Android中WebView与H5的交互,Native与JS方法互调

    项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...

  4. 【WPF】ListBox无法滚动

    问题:ListBox显示多个条目时,无法滚动,也不显示滚动条. 办法: 给ListBox控件加上ScrollViewer.VerticalScrollBarVisibility和ScrollViewe ...

  5. Android—— TextView文字链接4中方法

    转自:http://ghostfromheaven.iteye.com/blog/752181 Android 的实现TextView中文字链接的方式有很多种. 总结起来大概有4种: 1.当文字中出现 ...

  6. 启动hive出错,提示没有权限

    报错信息如下: which: no hbase in (/usr/local/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/bin:/usr/local/hive/bin:/ ...

  7. Windows与Linux下进程间通信技术比较

    一般我们写的程序都是以单个进程的方式来运行的,比较少涉及到多进程.特别是在windows下,因为Windows是按照线程来分配CPU时间片的,线程是最小的调度单位,所以在Windows下更多的用到多线 ...

  8. 用 phpize 编译共享 PECL 扩展库

    有时候不能用 pecl 安装命令.这可能是因为在防火墙后面,或者是因为想要安装的扩展库还没有 PECL 兼容的包,例如 SVN 中尚未发布的扩展库.如果要编译这种扩展库,可以用更底层的编译工具来手工进 ...

  9. Redis未授权访问漏洞

    一.漏洞描述和危害  Redis因配置不当可以未授权访问,被攻击者恶意利用.攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据. 攻击者可通过EVAL ...

  10. 数据库 Oracle数据库性能优化

    --在Oacle数据库涉及到全表扫描的SQL查询(top,count)中, --现场用户删除表中大部分数据,只保留1W条数据,但是查询仍然很慢,检查磁盘IO,发现磁盘IO不是很高 --经过分析Oacl ...