1. [#!/usr/bin/expect] 

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

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

2. [set timeout 30] 

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

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 的可执行文件。

4. [expect "password:"] 

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

5. [send "ispass\r"] 

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

温馨提示: 命令字符串结尾别忘记加上“\r”。 

6. [interact] 

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

7.$argv 参数数组

expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数

实例脚本

#!/usr/bin/expect

#Usage sshsudologin.expect <host> <ssh user> <ssh password> <su user> <su password>

set timeout 60

spawn ssh -t [lindex $argv 0] [lindex $argv 2]

expect "yes/no" {
send "yes\r"
expect "*?assword" { send "[lindex $argv 1]\r" }
} "*?assword" { send "[lindex $argv 1]\r" } #expect "# " { send "su - [lindex $argv 3]\r" }
#expect ": " { send "[lindex $argv 4]\r" }
#expect "# " { send "ls -ltr\r" }
interact

最新文章

  1. go:系统参数or函数--未完
  2. 三维模型2.5D轮廓提取及遮挡部分的剔除
  3. .NET J2EE APP全局会话架构运用场景
  4. DirectX API 编程起步 #01 项目设置
  5. 事务码 ListSchema:查看Cube星型结构Schema
  6. C#中判断字符串中包含某个字符
  7. HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
  8. WIN7右下角的声音图标不见了
  9. oracle检查点checkpoint信息
  10. Ionic2+ 环境搭建
  11. Javascript跨域后台设置拦截
  12. OAuth2.0学习(1-6)授权方式3-密码模式(Resource Owner Password Credentials Grant)
  13. Django项目和Django初体验和创建、目录结构认识
  14. Spring Security默认的用户登录表单 页面源代码
  15. 羽翼metasploit第一,二季学习笔记
  16. JVM 垃圾回收GC Roots Tracing
  17. Redis 内存模型
  18. 超级干货 :一文读懂数据可视化 ZT
  19. 洛谷P1098 字符串的展开【字符串】【模拟】
  20. 根据json对象的值替换json数组里的值

热门文章

  1. Tcp/ip 报文解析
  2. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
  3. 如何利用ETW(Event Tracing for Windows)记录日志
  4. 【Reading Note】算法读书杂记
  5. Java 时间类-Calendar、Date、LocalDate/LocalTime
  6. 在centos7上安装Jenkins
  7. Spring resource bundle多语言,单引号format异常
  8. 代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)
  9. SharePoint 2013: A feature with ID has already been installed in this farm
  10. Linux基础介绍【第二篇】