天天看點

expect使用

有些指令卻需要使用者手動去就互動如passwd、scp

對自動部署免去使用者互動很痛苦,expect能很好的解決這類問題。

expect的核心是spawn expect send set

spawn 調用要執行的指令

expect 等待指令提示資訊的出現,也就是捕捉使用者輸入的提示:

send 發送需要互動的值,替代了使用者手動輸入内容

set 設定變量值

interact 執行完成後保持互動狀态,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。

expect eof 這個一定要加,與spawn對應表示捕獲終端輸出資訊終止,類似于if....endif

expect腳本必須以interact或expect eof結束,執行自動化任務通常expect eof就夠了。

設定expect永不逾時

set timeout -1

設定expect 300秒逾時,如果超過300沒有expect内容出現,則退出

set timeout 300

使用執行個體:

批量發送ssh秘鑰

allip=`nmap -v -sP 192.168.238.0/24|grep 192.168|grep -v "down"|grep -v 192.168.238.2 |cut -d " " -f5 2>/dev/null` 通過nmap掃描ip,擷取ip

        [ ! -x /usr/bin/expect ] && yum install expect -y  判斷是否安裝了expect因為預設是沒有安裝的

下面就是一個循環了 

        for i in $allip;do

                if [[ $i =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]];then

                /usr/bin/expect <<EOF

                set timeout 10

                spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$i

                expect {

                        "password" {send "redhat\n"}

                }

        expect eof

EOF

繼續閱讀