zoukankan      html  css  js  c++  java
  • expect详解及自动登录脚本的实现

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

    1 安装

    yum install -y expect
    

    2 语法介绍

    expect - send

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

    执行如下脚本

    expect "yes
    "
    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
    " {send "one
    "}
        "2
    " {send "two
    "}
        "3
    " {send "three
    "}
    }
    
    

    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
    ";exp_continue}     #exp_continue可以继续执行下面的匹配
    "*password" {send "$passwd
    "}
    }
    expect "login"
    send "pwd
    "               #登录成功执行pwd命令
    interact
    
    
  • 相关阅读:
    SCRUM站立会议
    燃尽图
    第一次作业----词频统计
    构建之法读感
    final 评论 II
    final 评论 I
    第十一周PSP
    学期回顾
    第十周PSP
    Gradle学习笔记
  • 原文地址:https://www.cnblogs.com/panyouming/p/9415158.html
Copyright © 2011-2022 走看看