0、前言
expect實現自動交互。如,scp,ssh,ftp等需要輸入密碼的交互需求;
例如ssh命令遠程登錄其他主機,會要求輸入密碼
(有時候有的機器登錄也不需要密碼)
0.1expect的命令
命令 | 含義 |
spawn | 調用要執行的命令 |
expect | 等待命令提示信息的出現(捕捉用戶提示信息) |
send | 發送需要交互的信息來替代手工輸入 |
set | 輸入變量的值 |
interact | 執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。 |
expect eof | 與spawn對應,表示捕捉終端輸出信息終止 |
解釋:interact 和expect eof 二者寫一個就行,必須要寫;
寫與不寫interact 和expect eof 的區別:
不寫的話,假使從服務器192.168.1.1 通過ssh登錄到 服務器192.168.1.2 ,登錄密碼自動輸入後,立馬又退回到1.1服務器;
寫上的話,登錄密碼自動輸入後,就保持在1.2服務器終端上,可以正常在1.2服務器上操作了。
0.2
#!/usr/bin/expect ----------->第一行告訴操作系統腳本里的代碼使用那一個shell來執行
set timeout -1 ----------->設置expect永不超時
set timeout 10 ------------>設置expect10s超時,如果超過10s,沒有expect內容出現,則會退出
expect 默認的時間是10s, 這個地方可以根據需求更改。
1、查看本機是否裝了expect
命令:which expect
如果裝了,會顯示expect 的目錄
沒有裝的話,看第二步。
2、expect的安裝(需要能夠上網)
系統爲RHEL/CentOS:
sudo yum install expect
系統爲Debian/Ubuntu:
sudo apt-get install expect
裝好目錄在/usr/bin/expect
3、expect單獨使用
4、expect 嵌套在shell中
方法1)shell中使用expect -c “expect腳本內容”來完成嵌套
例如:test.sh中內容:
#!/bin/sh
expect -c "
expect "hello"
send "world\n"
expect eof
"
方法2)expect <<EOF ...//... EOF