zoukankan      html  css  js  c++  java
  • Linux下Expect 完成自动输入密码

    今天要开发一个定时任务,然后加入cron列表中。但是有个问题摆在眼前,脚本的执行中需要输入数据库密码(貌似5.1版本以上不允许在-p后直接加密码,会报错)

    mysql -u root -p << SQL
    use db;
    set names utf8;
    `cat task.sql`
    SQL

    运行上述代码后,会提示:

    Enter password:

    expect可以帮助我们完成这件事情:

    将上述代码保存到一个文件中:db.sh

    并且编写如下代码保存为db.exp:

    #!/usr/bin/expect -f
    spawn db.sh
    expect "Enter password: "
    send "password
    "
    interact

    第一行指示了这个脚本要用哪个程序来运行;

    第二行是重点,在EXPECT下启动了一个我们要执行的程序;

    第三行也是重点,我们要告诉expect,当什么信息出现时需要expect帮助我们完成交互;

    第四行就是出现输入密码的提示时,要发送的内容;

    第五行的意思是保持交互,不要退出。如果没有这一句,脚本成功登录数据库后,会立即退出。

    执行

    $expect db.exp

    补充:

    使用脚本文件的例子--实现自动输密码
    #!/usr/bin/expect -f
    set password 123456
    #download
    spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/
    set timeout 300 
    expect "root@192.168.1.218's password:"
    set timeout 300 
    send "$password "
    set timeout 300 
    send "exit "
     
    ssh实现自动登录,登陆后sudo至root权限 并停在登录服务器上

    #!/usr/bin/expect -f

    set password 123456

    spawn ssh tdweb@192.168.99.59

    set timeout 300

    expect {

    "*yes/no" { send "yes "; exp_continue}

    "*password:" { send "$password " }

    }

    set timeout 300

    expect "$*"

    send "sudo su "

    expect "*password for *:"

    send "$password "

    interact

  • 相关阅读:
    mybatis中大于等于小于等于的写法
    RandomAccess接口
    ArrayList源码解析
    使用Docker搭建MySQL主从复制(一主一从)
    狂神Docker视频学习笔记(基础篇)
    【JQ】jQuery实现将div中滚动条滚动到指定位置的方法
    JAVA线程池的基本使用
    史上最全的Java技术体系思维导图,没有之一!
    springboot整合kafka
    spring cloud alibaba 分布式事务解决方案之seata-1.3.0
  • 原文地址:https://www.cnblogs.com/wangxusummer/p/4128661.html
Copyright © 2011-2022 走看看