来自http://blog.csdn.net/winstary/archive/2009/08/08/4422156.aspx
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:

#!/usr/bin/expect

settimeout30

spawnssh-lusername192.168.1.1

expect"password:"

send"ispass\r"

interact

##############################################

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

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

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

2.[settimeout30]

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

3.[spawnssh-lusername192.168.1.1]

spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用“whichspawn“之类的命令去找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]

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

#!/usr/bin/expect#注意安装的路径,不确定whereisexpect一下

#Changealoginshelltobash

setuser[lindex$argv0]

spawnbash$user

expect"]:"

send"/bin/bash"

expecteof

exit

spawn代表在本地终端执行的语句,在该语句开始执行后,expect开始捕获终端的输出信息,然后做出对应的操作。expect代码中的捕获的(yes/no)内容用于完成第一次访问目标主机时保存密钥的操作。有了这一句,scp的任务减少了中断的情况。代码结尾的expect eof与spawn对应,表示捕获终端输出信息的终止。

最新文章

  1. Postgresql 取随机数
  2. jQuery框架的简单使用(H5)
  3. [struts2]开启struts2开发模式
  4. 使用jQuery UI方法
  5. poj2505-A multplication game
  6. [Django] Pinax 项目下APP的 安装与使用
  7. JQuery读取Exif信息
  8. Android简单逐帧动画Frame的实现(三)
  9. Android 7.0(牛轧糖)新特性
  10. Github SSH 的key 生成步骤下
  11. 宠物收养场 Treap
  12. UiPath实践经验总结(二)
  13. 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
  14. 修改tomcat命令黑窗口的名字
  15. Linux C++ UDP Socket通信实例
  16. codeforces 338D GCD Table
  17. “CMD /C”的特殊应用
  18. Python map/reduce
  19. python-day37--concurrent.futures模块 实现进程池与线程池
  20. 胡乱摸的NOIP2017游记和总结

热门文章

  1. FilenameFilter用法
  2. rational rose USE CASE
  3. nginx location的配置
  4. 使用quartz 定时任务
  5. du 命令
  6. POJ2286 The Rotation Game
  7. Android视频直播解决方案(rstp、udp)
  8. 洛谷P1130 红牌
  9. Vijos1459 车展 (treap)
  10. C++ 中常见预定义宏的使用