shell指令碼實現ssh自動登入遠端伺服器示例:
#!/usr/bin/expectspawn ssh [email protected]
expect "*password:"
send "123\r"
expect "*#"interact
expect是乙個用來處理互動的命令。借助expect,我們可以將互動過程寫在乙個指令碼上,使之自動化完成。形象的說,ssh登入,ftp登入等都符合互動的定義。下文我們首先提出乙個問題,然後介紹基礎知四個命令,最後提出解決方法。
如何從機器a上ssh到機器b上,然後執行機器b上的命令?如何使之自動化完成?expect中最關鍵的四個命令是send,expect,spawn,interact。
send:用於向程序傳送字串send命令接收乙個字串引數,並將該引數傳送到程序。expect:從程序接收字串
spawn:啟動新的程序
interact:允許使用者互動
expect1.1> send "hello world\n"hello world(1)基礎知識
expect命令和send命令正好相反,expect通常是用來等待乙個程序的反饋。expect可以接收乙個字串引數,也可以接收正規表示式引數。和上文的send命令結合,現在我們可以看乙個最簡單的互動式的例子:
expect "hi\n"send "hello there!\n"這兩行**的意思是:從標準輸入中等到hi和換行鍵後,向標準輸出輸出hello there。
tips: $expect_out(buffer)儲存了所有對expect的輸入,<$expect_out(0,string)>儲存了匹配到expect引數的輸入。比如如下程式:
expect "hi\n"當在標準輸入中輸入send "you typed <$expect_out(buffer)>"
send "but i only expected <$expect_out(0,string)>"
test是,執行結果如下hi
you typed: test(2)模式-動作hii only expect: hi
expect最常用的語法是來自tcl語言的模式-動作。這種語法極其靈活,下面我們就各種語法分別說明。
單一分支模式語法:
expect "hi"匹配到hi後,會輸出"you said hi"
多分支模式語法:
expect "hi" \匹配到hi,hello,bye任意乙個字串時,執行相應的輸出。等同於如下寫法:"hello" \
"bye"
expect上文的所有demo都是和標準輸入輸出進行互動,但是我們跟希望他可以和某乙個程序進行互動。spawm命令就是用來啟動新的程序的。spawn後的send和expect命令都是和spawn開啟的程序進行互動的。結合上文的send和expect命令我們可以看一下更複雜的程式段了。"hello"
"bye"
}
set timeout -1spawn ftp ftp.test.com //開啟新的程序,該程序使用者連線遠端ftp伺服器
expect "name" //程序返回name時
send "user\r" //向程序輸入anonymous\r
expect "password:" //程序返回password:時
send "123456\r" //向程序輸入[email protected]\r
expect "ftp> " //程序返回ftp>時
send "binary\r" //向程序輸入binary\r
expect "ftp> " //程序返回ftp>時
send "get test.tar.gz\r" //向程序輸入get test.tar.gz\r
spawn ftp ftp.test.com上文中提到:expect "name"send "user\r"
expect "password:"
send "123456\r"
interact
如何從機器a上ssh到機器b上,然後執行機器b上的命令?如何使之自動化完成?下面一段指令碼實現了從機器a登入到機器b,然後執行機器b上的pwd命令,並停留在b機器上,等待使用者互動。具體含義請參考上文。
#!/home/tools/bin/64/expect -fset timeout -1
spawn ssh $buser@$bhost
expect "*password:"
expect "$*"
interact
expect 的小點 expect的使用
expect password send 123456 r 注意 expect 和字串 password 中間有乙個空格,send和字串 123456 r 中間有乙個空格。因為expect和send都是乙個命令,只有加空格才能與引數分開。expect 注意 expect與 之間有乙個空格,因為這樣e...
expect命令使用
expect 是由don libes基於tcl tool command language 語言開發的,主要應用於自動化互動式操作的場景,借助expect處理互動的命令,可以將互動過程如 ssh登入,ftp登入等寫在乙個指令碼上,使之自動化完成。尤其適用於需要對多台伺服器執行相同操作的環境中,可以大...
Expect基礎使用
expect是乙個用來實現自動互動功能的軟體套件。使用expect可以模擬手工互動的過程,實現自動與遠端程式的互動。例如當執行ssh命令連線伺服器時,需要手動輸入密碼,如果採用expect,就可以自動互動,無需再人工手動輸入密碼了。ubuntu系統,執行以下命令安裝 apt install expe...