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\n"
interact

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

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

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

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

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

执行

$expect db.exp
时间: 2024-10-12 04:54:15

Linux下Expect 完成自动输入密码的相关文章

用了一天的时间,linux下expect实现ssh自动登录服务器记,鄙视下网上各种抄来抄去残段子

因为要对客户方的快30个项目进行特别有顺序的重启,所以不得不想办法写个脚本,网上看了不少段子.真是残缺的可以.没有一段是可以正常运行的.我来按顺序记录一下 脚本的本身 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下: ############################################## #!/usr/bin/expect set timeo

Linux使用expect实现自动登录的脚本

前提条件服务器已经安装过tcl和expect, 若未安装:可以先执行 yum  install tcl  expect  进行安装 第一步.编写以下自动登录脚本login.sh ############################################## #!/usr/bin/expectset timeout 10 spawn ssh username@172.16.2.1expect "password:"send "password\r"int

ssh采用expect实现自动输入密码登录、拷贝

1. 引言 最近做了一个项目,需要频繁与另一台主机进行文件的传输:中间想到了很多方式:FTP.samba.curl等,但是还是感觉scp最好用. SCP使用教程可参阅:http://www.jb51.net/article/70919.htm 但scp也存在着一些问题,每次都需要输入目标机的密码,需人为手动干预,这个就比较烦了,那么有没有可以自动进行界面交互的命令呢? 答案当然是:有: expect喽 except使用教程:https://www.cnblogs.com/lixigang/art

windows,linux下SVN实现自动更新WEB目录

通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率也低.使用SVN钩子脚本进行WEB目录同步,可很好的解决这方面的问题.由于测试机器与SVN库都在同一台机器里,所以处理起来比较方便. svn项目下面有hooks目录,里面存放的是全部的钩子脚本的模板 post-commit.tmpl 为客户端commit提交后触发 以下是windows和linux下自动更新版本库的方法: 在SVN 项目版本库的存储目录下的hooks 目录,新建立

Shell结合Expect实现自动输入密码

Shell结合Expect自动输入密码示例 1 #!/bin/bash 2 3 cd /data/live 4 5 /usr/bin/expect <<-EOF 6 spawn git clone "ssh://xxxxxxxxxxxx" 7 expect "*passphrase*" 8 send "passwordhere\n" 9 expect eof 10 EOF 11 12 time=`/bin/date "+%Y

Linux中shell脚本自动输入密码

最近遇到蛋疼的事,就是在shell脚本中需要获取root权限,因此在shell脚本运行过程中需要输入密码. 懒惰的我当然想让shell在执行过程中就可以自动输入密码,这样就可以抽空看看妹子图.. 我通过查询资料了解到,可以通过“ 重定向操作符 ” 将标准输入内容作为内容自动输入.但是这样需要用 -i 参数结束交互式输入 例如: sudo -i nginx < pwd 然后另建一个文件:pwd.内容为密码:1234.

linux下日期时间自动同步设置(rdate,ntpdate两种方法)

linux下同步时间,至少有两种方法:rdate,ntpdate两种.centos最小化安装默认不安装,先确认已经安装过,否则先安装.其中rdate本身是用来获取远程时间服务器上时间用的,带上 -s 参数,就可以将获取到的时间应用到本地系统. NAME       rdate - get the time via the networkSYNOPSIS       rdate [-p] [-s] [-u] [-l] [-t sec] [host...]DESCRIPTION       rdat

linux下expect环境安装

expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,很实用!expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装 下载:expect-5.43.0.tar和tcl8.4.11-src.tar下载地址:https://pan.baidu.com/s/1kVyeLt9 提取密码:af9p 将expect和tcl的软件包下载放到/usr/local/src目录下 (1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装[[e

Linux下用SCP无需输入密码传输文件

最近发现一个很吓人的事情,备份服务器里的备份目录下竟然没有备份文件,仔细一看原来是scp命令需要密码的问题.之前建立过信任关系,可能是因为修改了root密码,不成功了.下面说下具体操作.通常用scp命令通过ssh获取对方linux主机文件的时候都需要输入密码确认,不过通过建立信任关系,可以实现不输入密码. 这里假设需要备份的服务器 S 的IP:192.168.0.1用作备份的服务器 B 的 IP:192.168.0.2 需要从A免密码输入复制文件至B. 1. 在服务器 S 上执行如下命令来生成配