expect可以让一些交互的任务自动完成,我们可以将一些交互过程写入脚本,ssh登录就是一个简单的实现,下面将介绍expect的用法。

1 安装

yum install -y expect

2 语法介绍

expect - send

这两个指令会配合使用,当expect接收到一个和预期字符串相匹配的输入,会执行send指令,send会发出字符串或者对应的指令。

执行如下脚本

expect "yes\n"
send "What you type in is $expect_out(buffer)"
send "The correct input is $expect_out(0,string)"
#note:$expect_out(buffer)储存了所有对expect的输入,$expect_out(0,string)储存了所有相匹配值的输入

当你输入为yes时,输出结果为

yes
What you type in is yes
The correct input is yes

当你输入第一次不为所预期的字符串时,进程会继续等待,直到你输入为yes:

dd
yes
What you type in is dd
yes
The correct input is yes

expect也可像switch的语句一样:

expect {
"1\n" {send "one\n"}
"2\n" {send "two\n"}
"3\n" {send "three\n"}
}

spawn

spawn后面会加上一个命令,打开一个新的进程。

spawn ssh@root 192.168.1.1

interact

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

3 自动登录脚本示例

#!/usr/bin/expect
set timeout -1 #设置超时时间,-1为用不超时
set ip "192.168.100.1"
set passwd "root"
set user "root"
spawn ssh $user@$ip
expect {
"*yes/no" {send "yes\r";exp_continue} #exp_continue可以继续执行下面的匹配
"*password" {send "$passwd\r"}
}
expect "login"
send "pwd\r" #登录成功执行pwd命令
interact

expect详解及自动登录脚本的实现的更多相关文章

  1. linux expect详解(ssh自动登录)

    shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:&quo ...

  2. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  3. [C#详解] (1) 自动属性、初始化器、扩展方法

    文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/CSharp-focus-1.html 代码下载:点我下载 目录 前言 属性与自动属性 属性 自动属 ...

  4. Linux expect详解

    随处可见的expect第一次见expect这个命令还是我第一次参加全量上线的时候,那是公司的一个牛人用Shell脚本写的一套自动部署.MD5 比对.发布的全量上线工具,没事的时候,看了下其中的几个脚本 ...

  5. IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)

    转自 http://blog.csdn.net/zzfsuiye/article/details/8251060 概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInte ...

  6. 详解Mysql自动备份与恢复

    通过 mysqldump命令,直接生成一个完整的 .sql 文件 Step 1: 创建一个批处理备份SQL c: cd C:Program Filesmysql5.6.24bin mysqldump ...

  7. java类型转换详解(自动转换和强制转换)

    自动转换 class Hello { public static void main(String[] args) { //自动转换 int a = 5; byte b = 6; int c = a ...

  8. Linux下的crontab定时、执行任务命令详解 oracle 自动备份

    在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为&qu ...

  9. python logging详解及自动添加上下文信息

    之前写过一篇文章日志的艺术(The art of logging),提到了输出日志的时候记录上下文信息的重要性,我认为上下文信息包括: when:log事件发生的时间 where:log事件发生在哪个 ...

随机推荐

  1. CocoaPods :为iOS程序提供依赖管理的工具(yoowei)

    修改于:2016.11.18   2017.1.10  2019.01.31 CocoaPods 源码 : https://github.com/CocoaPods/CocoaPods CocoaPo ...

  2. 阿里云oracle启动失败

    1.监听启动失败: 将$ORACLE_HOME/network/admin 中的listener.ora中的主机名改为localhost 2.sqlplus中startup启动失败 ,出现ORA-00 ...

  3. Beta冲刺第二周王者荣耀交流协会第五次会议

    1.立会照片 成员:王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王磊 2.时间跨度: 2017年11月21日 15:00 — 15:17,总计17分钟. 3.地点: 一食堂 ...

  4. Scrum meeting报告

    Scrum Meeting报告 要点: 讨论XueBa系统已有的和待实现的功能 短期内的任务分配 初步确定小组成员在第一轮迭代开发中任务 一.      XueBa系统已有的和待实现的功能 项目完成情 ...

  5. Scrum Meeting 4 -2014.11.8

    开始了apec的放假,希望大家能处理好工作与休息的时间分配,不要玩疯了啊. 各任务都开始实现了自己的算法,需要部署的服务器我也进去看了看情况,希望最后能部署成功. 最近发现的一些关于上一届实现的问题, ...

  6. Linux 基础入门第一次实验笔记

    第一节.实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 Linux ...

  7. EF 小数位的保留

    问题描述:当采用EF的DbContext保存decimal类型数据到数据库,默认只会保存小数点后的前2位小数,其余均置0:例如保存101.182352152322,实际存到数据库里的数据为101.18 ...

  8. 配置高可用集群(实验) corosyne+pacemaker

    环境准备: 一准备三个虚拟机,把/etc/hosts/文件配置好                              192.168.43.9 node0                     ...

  9. 词频统计Web工程

    本次将原本控制台工程迁移到了web工程上.. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英 ...

  10. Robot Framework 教程 (7) - 使用For循环

    在自动化测试过程中,使用For循环来对某个动作进行重复操作是很普遍的行为.在Robot Framework中,各种测试库中均提供了多种方式的For循环结构,在其中覆盖了大部分类型的循环类型.而Robo ...