使用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. mysql5.6.16绿色版配置、运行

    原文:mysql5.6.16绿色版配置.运行 1.从该地址http://dev.mysql.com/downloads/mysql/中选择windows的版本,选择下载. 2.将下载的压缩包解压. 3 ...

  2. Quartz使用-入门使用(java定时任务实现)

    注:这里使用的是Quartz1.6.5版本号(包:quartz-1.6.5.jar) //測试main函数 //QuartzTest.java package quartzPackage; impor ...

  3. Google maps API开发

    原文:Google maps API开发 Google maps API开发(一) 最近做一个小东西用到google map,突击了一下,收获不小,把自己学习的一些小例子记录下来吧 一.加载Googl ...

  4. Linux httpd 跳转简单方法二

    使用mod_proxy 这种方法要添加上mod_proxy_http.so 在httpd.conf 中打开httpd-vhost 在 httpd-vhost 里面添加上 <VirtualHost ...

  5. js页码生成库,一个适合前后端分离的页码生成器

    原文:js页码生成库,一个适合前后端分离的页码生成器 前言 上星期写的任务里面有需要进行分页的处理,git搜索了一番,没有觉得合适的,于是自己临时写了个分页的算法. 然后等闲下来的时候,决定把分页进行 ...

  6. WPF应用程序支持多国语言解决方案

    原文:WPF应用程序支持多国语言解决方案 促使程序赢得更多客户的最好.最经济的方法是使之支持多国语言,而不是将潜在的客户群限制为全球近70亿人口中的一小部分.本文介绍四种实现WPF应用程序支持多国语言 ...

  7. 苹果iOS苹果公司的手机用户都有权索赔

    大家知道.手机中的操作系统(基础软件)存储在手机固(firm,ware)之中,一般而言,手机用户自己是不能修改的. 苹果iOS手机的系统后门(服务程序)也存储在手机固件之中.手机用户自己是无法删除的. ...

  8. Javascript操作阵列

    头操作unshift和shift var arr = [1, 2, 3]; arr.unshift(4); // arr = [4, 1, 2, 3]; 头加 arr.shift(); // arr ...

  9. 读书笔记—CLR via C#章节11-13

    前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...

  10. Mysql高级之权限检查原理

    原文:Mysql高级之权限检查原理 用户进行数据库操作分为两步: 1 是否有权限连接,根据host,name,password: 2 是否有权限进行CURD: 图示解说: 关于用户权限在哪里进行存放? ...