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

  脚本代码如下:
  ##############################################
  #!/usr/bin/expect
  set timeout 30
  spawn ssh -l username 192.168.1.1
  expect "password:"
  send "ispassr"
  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 "ispassr"]
  这里就是执行交互动作,与手工输入密码的动作等效。
  温馨提示: 命令字符串结尾别忘记加上“r”,如果出现异常等待的状态可以核查一下。
  6. [interact]
  执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

  #!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下
  # Change a login shell to bash
  set user [lindex $argv 0]
  spawn bash $user
  expect "]:"
  send "/bin/bash "
  expect eof
  exit

使用expect实现ssh自动输入密码,从而自动登陆Linux
用以下命令执行:

expect -f expect-ssh.exp <username>
<password> <hostname
or ip>

注意,在这个expect-ssh.exp中,connect函数主要负责登陆,代码的最后两行,两个send是登陆上去后,执行的命令,注意最后一定要执行一个exit,否则会导致expect执行完成后还留在远程主机上。

这里是expect-ssh.exp的源码:

proc usage {} {

puts stderr "usage: $::argv0 username password ipaddress"

}

proc connect {pass} {
   expect {

"(yes/no)?" {

send "yesn"

expect "*password:" {

send "$passn"

expect {

"*#" {

}

}

}

}

"*password:" {

send "$passn"

expect {

"*#" {

}

}

}

}

}

} { usage }

set username [lindex ]

set password [lindex ]

set hostip [lindex ]

spawn ssh ${username}@${hostip}

if {[connect $password]} {

}

send "rm -f /root/testeric;rm -f pattern_filen"
send "exitn"
expect eof

[转载]expect spawn、linux expect 用法小记

 
 
 
 
 
 
 
 
################################################################
宗上所述,其实最简单的还是。这个做法:
  链接:http://blog.163.com/luojianlin_622/blog/static/271166402009871414258/
内容如下:

linux下ssh自动登录的脚本

2009-09-07 13:41:42|  分类: 默认分类 |字号 订阅

 

linux下ssh自动登录的脚本
由于每次都要从中转的Linux服务器上链接到其它Linux服务器,
每次都需要输入长串的ssh命令。并且还要重复输入密码,很繁琐。因此整理脚本,简化为每次只要输入主机

名,即可自动登录
1.最简单的省略用户名和主机名的做法
alias mq=’ssh -llizongbo -p13800 ‘
这样,输入 mq 618119.com即为: ssh -llizongbo -p13800 618119.com
解决了每次需要输入lizongbo的繁琐。但是并没有解决每次需要输入密码的繁琐
2.改进,需要解决输入密码的问题
编写 mssh.sh脚本,内容如下:

view plaincopy to clipboardprint?

#!/usr/bin/expect -f
#auto ssh login
set timeout 30
set sshhost [lindex $argv 0]
spawn ssh -llizongbo -p13800 $sshhost
expect “password:”
send “lizongbo_618119\r”
interact

给文件加上可执行权限: chmod +x ./mssh.sh
如果文件默认有其它权限,建议最好设置为只能自己读取,修改和执行
chmod 700 ./mssh.sh
测试成功:
./mssh.sh 618119.com
直接登录到了 618119.com

 
还可以参考这个链接的内容:
 
剩下的去执行什么命令,这就要靠bash脚本自己了。呵呵,你懂得。我喜欢把所有的命令写成一行,嘿嘿~钟爱 | 管道与 && 哈哈

[转载]expect spawn、linux expect 用法小记的更多相关文章

  1. 转载:document.execCommand()的用法小记

    首先要说明的是在firefox下支持不好.2D-Position 允许通过拖曳移动绝对定位的对象. AbsolutePosition 设定元素的 position 属性为“absolute”(绝对). ...

  2. linux expect, spawn用法小记

    linux expect, spawn用法小记_IT民工_百度空间 linux expect, spawn用法小记 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://sys ...

  3. expect spawn、linux expect 用法小记

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

  4. 【转】shell expect spawn、linux expect 用法小记 看着舒服点

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

  5. Centos expect spawn、linux expect 用法

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

  6. Linux expect用法介绍

    1.expect是linux中一个交互命令,一般在 /usr/bin/expect路径下,如果该路径未加入到环境中需要先添加,其作用场景常用于交互执行输入指令 常用命令: expect 获取上一命令执 ...

  7. Linux expect 用法

    expect是建立在tcl基础上的一个工具,它用来让一些需要交互的任务自动化地完成. 因为expect是基于tcl的,所以需要你的系统中安装有tcl 检查是否安装tcl,expect [root@ma ...

  8. Linux expect 介绍和用法

    expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. expect自动交互流程: spawn启动指定进程---expect获取指定关键字--- ...

  9. expect工具的简单用法

    原创文档,转载请注明作者与本文URL. linux中的expect工具很不错,能够自动实现交互,也即是说自己自动进行ssh登录等动作.这是我写的一个简单的用法,稍作修改就可以变成很实用都脚本.有人介绍 ...

随机推荐

  1. OC第四课

    主要内容:NSString.NSArray.NSNumber 一.苹果公司的帮助文档(API) 学会查看API对于后续的编程有很好的帮助 进入方法: Xcode ->Help -> Doc ...

  2. C++并发编程学习笔记&lt;1&gt; 入门

    入门 多线程C++程序是什么样子的? 它看上去和其它全部C++程序一样,一般是变量.类以及函数的组合. 唯一真正的差别在于某些函数能够并发执行, 当然.为了并发地执行函数,必须使用特定的函数以及对象来 ...

  3. ORACLE 中IN和EXISTS比较

    ORACLE 中IN和EXISTS比较 EXISTS的执行流程      select * from t1 where exists ( select null from t2 where y = x ...

  4. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)

    原文:[推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不殆) [推荐]ORACLE PL/SQL编程之五: 异常错误处理(知已知彼.百战不殆) 继上三篇:ORACLE PL/S ...

  5. 使用Vim或Codeblocks格式化代码

    在网上的代码,有很多的代码都是丢失缩进的,几行还好,手动改改,多了呢,不敢想象,没有缩进的代码.别说排错,就是阅读都是困难的,还好,有两个常用工具可以轻松的解决问题. (一)Vim(简单方便,可将代码 ...

  6. 临时和永久修改oracle sysdate的默认输出格式

    1.当前会话有效 alter session set NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'; 2.永久生效 sys用户登入后执行如下命令 然后重启数据库使其生 ...

  7. uva 11181 - Probability|Given

    条件概率公式:P( A|B ) = P( AB ) / P( B ) 表示在事件B发生的前提,事件A发生的可能性: 问题的: 复位事件E:r个人买东西: 事件Ei:文章i个人买东西: 的要求是P( E ...

  8. 为什么使用Ninject?

    Ninject 3 学习笔记 一.为什么使用Ninject? 分类: 程序2012-11-10 19:23 2209人阅读 评论(0) 收藏 举报 c#iocNinject框架注入 最近在使用IoC进 ...

  9. ASP.NET Web Api构建基于REST风格的服务实战系列教程

    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[十]——使用CacheCow和ETag缓存资源 系列导航地址http://www.cnblogs.com/fzrain/p/3 ...

  10. 2014.3.6-C语言学习小结

    链表基础: 知识点: 1.链表基础 2.节点的创建和添加 llist_append_node 3.链表的遍历 llist_print_each 4.链表的查找与修改 5.链表的插入与删除 6.链表的销 ...