美文网首页
编写expect脚本实现自动化远程登录

编写expect脚本实现自动化远程登录

作者: 综合对接组 | 来源:发表于2016-05-20 16:57 被阅读0次

    一、概述


    ·我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而expect就使用来实现这种功能的工具。

    二、脚本代码详解


    ##############################################
      
    #!/usr/bin/expect  
      
    set timeout 30  
      
    spawn ssh -l username 192.168.1.1  
      
    expect "password:"  
      
    send "ispass\r"  
      
    interact  
      
    ##############################################
    
    [#!/usr/bin/expect]

    ·这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bashwindows下的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.comdir.exe 的可执行文件。
    ·它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

    4. [expect "password:"]

    ·这里的expect也是expect的一个内部命令,有点晕吧,expectshell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒

    5. [send "ispass\r"]

    ·这里就是执行交互动作,与手工输入密码的动作等效。
    ·温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。

    6. [interact]

    ·执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]

    三、实现演示


    ·1、首先创建一个expect脚本ssh_expect,文件内容如下:

    #!/usr/bin/expect -f
    set hostname [lindex $argv 0]
    set user [lindex $argv 1]
    set passwd [lindex $argv 2]
    set timeout 30
    set force_conservative 1
    if {$force_conservative} {
      set send_slow {128 .1}
    }
    spawn ssh $user@$hostname;
    expect {
        "*continue connecting (yes/no)?" { send -s "yes\r"; exp_continue }
        "*assword:" {
            send -s "$passwd\r";
        }
    }
    interact
    

    ·2、然后定义一些命令别名,比如:

    alias  h101='ssh_expect 192.168.0.101 <user> <password>'
    alias  h102='ssh_expect 192.168.0.102 <user> <password>'
    

    这些别名可以写到~/.bashrc文件中
    然后执行 h101 就可以自动登录192.168.0.101机器了。


    参考文献:

    http://www.jb51.net/article/72609.htm
    http://www.cnblogs.com/Javame/p/4281637.html
    http://www.linuxidc.com/Linux/2014-02/96262.htm
    http://blog.csdn.net/zhuying_linux/article/details/6657020
    http://www.cnblogs.com/iloveyoucc/archive/2012/06/25/2561179.html

    相关文章

      网友评论

          本文标题:编写expect脚本实现自动化远程登录

          本文链接:https://www.haomeiwen.com/subject/fbynrttx.html