2021-05-12 14:32:11
自動登入expect指令碼範例圖文教學
簡介:
1.expect的講解
2.範例操作自動登入指令碼
expect講解
expect可以讓我們實現自動登入遠端機器,並且可以實現自動遠端執行命令。當然若是使用不帶密碼的金鑰驗證同樣可以實現自動登入和自動遠端執行命令。但當不能使用金鑰驗證的時候,我們就沒有辦法了。所以,這時候只要知道對方機器的賬號和密碼就可以通過expect指令碼實現登入和遠端命令。
Expect中最關鍵的四個命令是send,expect,spawn,interact。
send:用於向進程傳送字串
expect:從進程接收字串
spawn:啟動新的進程
interact:允許使用者互動
1. send命令
send命令接收一個字串引數,並將該引數傳送到進程。
expect1.1> send "hello worldn"hello world
2. expect命令
expect命令和send命令正好相反,expect通常是用來等待一個進程的反饋。expect可以接收一個字串引數,也可以接收正規表示式引數。
expect "hin"send "hello there!n"
這兩行程式碼的意思是:從標準輸入中等到hi和換行鍵後,向標準輸出輸出hello there
3. spawn命令
上文的所有demo都是和標准輸入輸出進行互動,但是我們跟希望他可以和某一個進程進行互動。spawm命令就是用來啟動新的進程的。
set timeout -1spawn ftp ftp.test.com //開啟新的進程,該進程使用者連線遠端ftp伺服器
expect "Name" //進程返回Name時
send "userr" //向進程輸入
anonymousrexpect "Password:" //進程返回Password:時
send "123456r" //向進程輸入don@libes.comr
expect "ftp> " //進程返回ftp>時
send "binaryr" //向進程輸入binaryr
expect "ftp> " //進程返回ftp>時
send "get test.tar.gzr" //向進程輸入get test.tar.gzr
4.interact
到現在為止,我們已經可以結合spawn、expect、send自動化的完成很多工了。但是,如何讓人在適當的時候干預這個過程了。比如下載完ftp檔案時,仍然可以停留在ftp命令列狀態,以便手動的執行後續命令。interact可以達到這些目的。下面的demo在自動登入ftp後,允許使用者互動。
spawn ftp ftp.test.com
expect "Name"
send "userr"
expect "Password:"
send "123456r"
interact
2台主機
伺服器端:back :192.168.19.134
用戶端:other:192.168.19.135
伺服器端操作
1.使用expect之前,需要先安裝expect:
yum install -y expect
安裝ssh
yum install openssh-server -y
yum -y install openssh-clients
2.新建一個自動登入指令碼檔案
格式:
spawn ssh -l username 192.168.1.1
expect{
"(yes/no)?" { send "yes"; exp_continue}
"password:" {send "AAAA"}
}
interact
vim login.expect
#! /usr/bin/expect
#about login
#written by lizheng
set host "192.168.19.135"
set passwd "lizheng123"
spawn ssh root@$host
expect {
"yes/no" { send "yesr"; exp_continue}
"password:" { send "$passwdr" }
}
interact
spacer.gif
3.更改許可權
chmod +x login.expect
4.執行指令碼語句
./login.expect
輸入客戶機的密碼即可登入
5.退出
logout
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-02/140738.htm
相關文章