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

 

補充:

使用腳本文件的例子--實現自動輸密碼
#!/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\r"
set timeout 300 
send "exit\r"
 
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\r"; exp_continue}

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

}

set timeout 300

expect "$*"

send "sudo su\r"

expect "*password for *:"

send "$password\r"

interact


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM