zoukankan      html  css  js  c++  java
  • ubuntu下用expect实现密码自动输入

    每次笔记本一开机启动,总会连用不着且碍事的触摸板也一块启动。便想写个脚本,让电脑启动时关闭触摸板。(当然,我想更好的办法是,修改系统启动时的加载模块,让触摸板不自动加载,但是目前还不知道用这种方法怎么做。) 其实关键的代码就是一句:  
    sudo modprobe -r psmouse 
     这里解释下:modprobe是加载模块的命令,-r的参数则是移除。psmouse是触摸板的模块代名。  
    虽然代码很简单,但是由于涉及到sudo权限,需要输入密码。而写这个脚本的初衷是让其自动执行,不再交互。如果每次还要输入密码,便失去写这个脚本的意义了,还不如每次在终端下执行命令呢。  
    网上有这么写的,但是我用了之后发现不行,论坛上也有很多人说不行,不知道为什么。 
    echo "password" | sudo -S netstat -tlnp  
     也有一个也不行,是这样的: 
    sudo modprobe -r psmouse<<EOF your-password EOF 
    看起来很有道理,不知道为啥也不行。  
    也有人说用expect,由于之前不知道这个东西,便一直没用。现在别的方法都不行了,我便试试这个方法。果然很好使,奉献出来共大家参考。后边有详细的代码解释。 
    自己整理的代码如下: 
    ###############################################
    #!/usr/bin/expect   
    set timeout 30 
    spawn sudo modprobe -r psmouse   
    expect "password for figo:" 
    send "**** "  #这里的“****”就是你的密码   
    interact 
    ##############################################   

    1. [#!/usr/bin/expect] 
      这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。   注意:这一行需要在脚本的第一行。   

    2. [set timeout 30] 
      基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒  

    3. [spawn sudo modprobe -r psmouse] 
      spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。 
      它主要的功能是给sudo modprobe运行进程加个壳,用来传递交互指令。   

    4. [expect "password for figo:"] 
      这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒。注意,这里password for figo:是你正常情况下输入sudo modprobe -r psmouse之后显示的让你输入密码的提示,自己复制下就行了。  

     5. [send "ispass "] 
      这里就是执行交互动作,与手工输入密码的动作等效。 
      温馨提示: 命令字符串结尾别忘记加上“ ”,如果出现异常等待的状态可以核查一下。   6. [interact] 
      执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行 
    #!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下。UBUNTU12.04好像默认没有安装expect,我们只需要在终端执行以下命令就OK了: sudo apt-get install expect 

  • 相关阅读:
    计划任务
    Crontab 定时任务格式参数
    Nginx 内核优化
    AC自动机
    Benelux Algorithm Programming Contest 2017(D)
    BAPC2017
    2018.9青岛网络预选赛(K)
    2018.9青岛网络预选赛
    2018.9青岛网络预选赛(A)
    2018.9青岛网络预选赛(C)
  • 原文地址:https://www.cnblogs.com/gzxbkk/p/7815616.html
Copyright © 2011-2022 走看看