• expect实现自动输入密码功能


    系统:

    Ubuntu:16.04

    安装expect:

    sudo apt-get update
    
    sudo apt-get install expect

    脚本实例: 

    //这一行告诉操作系统脚本里的代码使用哪一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。 
    #!/usr/bin/expect 
    
    //set的功能是给参数赋值,这里设置的是超时时间,计时单位是:秒   。timeout -1 为永不超时
    set timeout 30
    
    //expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数。[lrange $argv 0 0]表示第1个参数,[lrange $argv 0 4]为第一个到第五个参数。
    set ipaddr [lrange $argv 0 0]
    
    set passwd "password"
    
    //spawn是进入expect环境后才可以执行的expect内部命令,功能是给ssh运行进程加个壳,用来传递交互指令。
    spawn ssh root@$ipaddr              
    
    //expect也是expect的一个内部命令,功能是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒 
    expect "password:"  
    
    //send的功能是执行交互动作,与手工输入密码的动作等效。命令字符串结尾别忘记加上“
    ”。
    send "$passwd
    " 
    
    //expect命令结束
    expect eof 
    
    //执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行 
    interact

     去除注释即为:

    #!/usr/bin/expect 
    
    set timeout 30
    
    set ipaddr [lrange $argv 0 0]
    
    set passwd "password"
    
    spawn ssh root@$ipaddr              
    
    expect "password:"  
    
    send "$passwd
    " 
    
    expect eof 
    
    interact

    参考资料:

    http://www.cnblogs.com/iloveyoucc/archive/2012/05/11/2496433.html

  • 相关阅读:
    MISP版本嵌入式QT编译时出现mips-linux-gcc command not found
    数据传输对象(DTO)介绍及各类型实体比较
    signalR例子
    WebAPI GET和POST请求的几种方式
    github教程
    Asp.net MVC + EF + Spring.Net 项目实践3
    SpringMVC
    SignalR
    SignalR的实时高频通讯
    开发视频教程
  • 原文地址:https://www.cnblogs.com/minglex/p/9647248.html
Copyright © 2020-2023  润新知