您好,登錄后才能下訂單哦!
簡介:
1.expect的講解
2.實例操作自動登錄腳本
expect講解
expect可以讓我們實現自動登錄遠程機器,并且可以實現自動遠程執行命令。當然若是使用不帶密碼的密鑰驗證同樣可以實現自動登錄和自動遠程執行命令。但當不能使用密鑰驗證的時候,我們就沒有辦法了。所以,這時候只要知道對方機器的賬號和密碼就可以通過expect腳本實現登錄和遠程命令。
Expect中最關鍵的四個命令是send,expect,spawn,interact。
send:用于向進程發送字符串
expect:從進程接收字符串
spawn:啟動新的進程
interact:允許用戶交互
send命令接收一個字符串參數,并將該參數發送到進程。
expect1.1> send "hello world\n"hello world
2. expect命令
expect命令和send命令正好相反,expect通常是用來等待一個進程的反饋。expect可以接收一個字符串參數,也可以接收正則表達式參數。
expect "hi\n"send "hello there!\n"
這兩行代碼的意思是:從標準輸入中等到hi和換行鍵后,向標準輸出輸出hello there
上文的所有demo都是和標準輸入輸出進行交互,但是我們跟希望他可以和某一個進程進行交互。spawm命令就是用來啟動新的進程的。
set timeout -1spawn ftp ftp.test.com //打開新的進程,該進程用戶連接遠程ftp服務器
expect "Name" //進程返回Name時
send "user\r" //向進程輸入
anonymous\rexpect "Password:" //進程返回Password:時
send "123456\r" //向進程輸入don@libes.com\r
expect "ftp> " //進程返回ftp>時
send "binary\r" //向進程輸入binary\r
expect "ftp> " //進程返回ftp>時
send "get test.tar.gz\r" //向進程輸入get test.tar.gz\r
到現在為止,我們已經可以結合spawn、expect、send自動化的完成很多任務了。但是,如何讓人在適當的時候干預這個過程了。比如下載完ftp文件時,仍然可以停留在ftp命令行狀態,以便手動的執行后續命令。interact可以達到這些目的。下面的demo在自動登錄ftp后,允許用戶交互。
spawn ftp ftp.test.com
expect "Name"
send "user\r"
expect "Password:"
send "123456\r"
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 "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
interact
3.更改權限
chmod +x login.expect
4.執行腳本語句
./login.expect
輸入客戶機的密碼即可登錄
5.退出
logout
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。