linux expect 實現(xiàn)定時scp的任務

一,什么是expect?

expect 是一種腳本語言,

在做系統(tǒng)管理時,我們很多時候需要輸入密碼,例如:連接 ssh,連接ftp,

那么如何能做到不輸入密碼嗎?

我們需要有一個工具,能代替我們實現(xiàn)與終端的交互,

那么,就是它:expect,管理員的最好的朋友之一

它能夠代替我們實現(xiàn)與終端的交互,我們不必再守候在電腦旁邊輸入密碼,

或是根據(jù)系統(tǒng)的輸出再運行相應的命令,

這些都可以由expect代替我們來完成

二,安裝 expect?

因為expect 是基于tcl, 所以建議yum安裝,省去相關依賴包的安裝

#yum install expect?

會安裝2個包 一個tcl, 一個expect?

檢查expect命令位置

#which is expect?

/bin/expect?

腳本如下


#!/bin/expect??

set timeout -1? ?

spawn scp -r /data/mysql/dbbackup? scp_user@10.129.148.11:/data/scp_data_dir/maxus_data/

expect "password:"

send "P1qSX2wDC!\r"

expect eof

exit


1.? #!/bin/expect

這一行告訴操作系統(tǒng)腳本里的代碼使用那一個shell來執(zhí)行。這里的expect其實和linux下的bash、windows下的cmd是一類東西。

注意:這一行需要在腳本的第一行。

2. set timeout -1

-1 永不超時,計時單位是:秒?

3. spawn scp -r /data/mysql/dbbackup? scp_user@10.129.148.11:/data/scp_data_dir/maxus_data/

spawn是進入expect環(huán)境后才可以執(zhí)行的expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執(zhí)行是找不到spawn命令的。所以不要用 “which spawn“之類的命令去找spawn命令。好比windows里的dir就是一個內部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執(zhí)行文件。

它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令。

4. expect "password:"

這里的expect也是expect的一個內部命令,有點暈吧,expect的shell命令和內部命令是一樣的,但不是一個功能,習慣就好了。這個命令的意思是判斷上次輸出結果里是否包含“password:”的字符串,如果有則立即返回,否則就等待一段時間后返回,這里等待時長就是前面設置的超時時間

5. send "ispass\r"

這里就是執(zhí)行交互動作,與手工輸入密碼的動作等效。

溫馨提示: 命令字符串結尾別忘記加上“\r”,如果出現(xiàn)異常等待的狀態(tài)可以核查一下。

6. interact

執(zhí)行完成后保持交互狀態(tài),把控制權交給控制臺,這個時候就可以手工操作了。如果沒有這一句登錄完成后會退出,而不是留在遠程終端上。

7. expect eof?

執(zhí)行完后退出expect 環(huán)境

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容