expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預(如:借助Expect處理交互的命令,可以將交互過程:ssh登錄,ftp登錄等寫在一個腳本上,使之自動化完成。尤其適用于需要對多臺服務器執行相同操作的環境中,可以大大提高系統管理人員的工作效率)
我們通過Shell可以實現簡單的控制流功能,如:循環、判斷等。但是對于需要交互的場合則必須通過人工來干預,有時候我們可能會需要實現和交互程序如te.NET服務器等進行交互的功能。而expect就使用來實現這種功能的工具。expect是一個免費的編程工具語言,用來實現自動和交互式任務進行通信,而無需人的干預(如:借助Expect處理交互的命令,可以將交互過程:ssh登錄,ftp登錄等寫在一個腳本上,使之自動化完成。尤其適用于需要對多臺服務器執行相同操作的環境中,可以大大提高系統管理人員的工作效率)
首先需要有expect:
可以通過以下命令查看是否安裝,如果未安裝直接 yum install expect,如果不行請自行百度安裝。
[root@localhost home]# whereis expect
expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz
[root@localhost home]# expect
編寫腳本如下:
#!/bin/bash
passwd="123456"
/usr/bin/expect <<-EOF
set timeout 50
spawn ssh [email protected]
expect {
"*yes/*" { send "yesr"; exp_continue }
"*password:" { send "$passwdr" }
}
expect "*]*"
send "df -hr"
EOF
解釋一下:
/usr/bin/expect <<-EOF #開始用expcet執行標志
EOF #結束標志
expect {} #是expect要實現交互的命令集
[root@localhost home]# ssh [email protected]
"*yes/*"
"*password:" { send "$passwdr" } #如上如果遇到返回值 *代表無限字符,后面是password:則執行 send發送字符串 r回車
expect "*]*" #等待出現]執行下一條命令
send "df -hr" #執行命令并回車。
登錄后復制
#!/bin/bash
passwd="admin"
/usr/bin/expect <<-EOF set timeout 50 spawn telnet 0 expect { "Login*" { send "adminr"} } expect { "*assword:" { send "$passwdr" } } expect { "*admin>" {send "security enable protocol-detectr"}
}
expect {
"*admin>" {send "security set port-abnormal detect 2r"}
}
expect {
"*admin>" {send "security show protocol-detect statusr"}
}
expect {
"*admin>" {send "security show port-abnormal-detect levelr"}
}
expect {
"*admin>" {send "exitr"}
}
EOF
- 原文來自:https://blog.51cto.com/u_14181351/5508763
- 本文地址:https://www.linuxprobe.com/linux-shel-telnet.html編輯:張雄,審核員:逄增寶
- Linux命令大全:https://www.linuxcool.com/
- Linux系統大全:https://www.linuxdown.com/
- 紅帽認證RHCE考試心得:https://www.rhce.net/