ifconfig UC 表示 用戶交互 絕對路徑 用戶 inter 制作 pass

expect是Unix系統中用來進行自動化控制和測試的軟件工具,由Don Libes制作,作為Tcl腳本語言的一個擴展,應用在交互式軟件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等
yum install -y expect

腳本一:

自動遠程登錄

 #! /usr/bin/expect
set host "192.168.226..130"
set passwd "123456"
spawn ssh [email protected]$host
expect {
"yes/no" { send "yes\r"; exp_continue}
"assword:" { send "$passwd\r" }
}
interact

運行腳本
chmod a+x 1.expect
./1.expect
備註,當初次ssh登陸時,會提示輸入yes或者no,因此需要發送一個yes,再回車。緊接著輸入賬戶的密碼。如果做了秘鑰認證,則不需要輸入密碼。interact 表示保持一個登陸狀態。不加的話,會馬上退出來。

腳本二:

自動遠程登錄後,執行命令並退出

#!/usr/bin/expect
set user "root"
set passwd "123456"
spawn ssh [email protected]
expect {
"yes/no" { send "yes\r"; exp_continue}
"password:" { send "$passwd\r" }
}
expect "]*"
send "touch /tmp/12.txt\r"
expect "]*"
send "echo 1212 > /tmp/12.txt\r"
expect "]*"
send "exit\r"

備註:] 表示系統登陸進來,輸入光標前面的狀態提示符,root用戶為]# 普通用戶為]$,為通配符。上面的腳本表示登陸進系統,在當前用戶目錄下,執行了兩條命令。

腳本三:

參數傳遞。相當於shell中的$1,$2,$3

#!/usr/bin/expect
set user [lindex $argv 0]
set host [lindex $argv 1]
set passwd "123456"
set cm [lindex $argv 2]
spawn ssh [email protected]$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"

備註:該腳本我們定義了三個需要傳遞的參數,第一個為要登陸機器的用戶名,第二個為主機ip,第三個為登陸系統以後需要發送的命令。因此當運行腳本時,需要加上這三個參數。
chmod a+x 3.expect
./expect root 192.168.226.130 ls
如果需要一次性發送多個命令可以這樣寫“ls;w;ifconfig",或者在腳本中再定義幾個參數。

腳本四:

同步文件 rsync的應用

#!/usr/bin/expect
set passwd "123456"
spawn rsync -av [email protected]:/tmp/12.txt /tmp/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

備註:該腳本相當於直接執行了一個做遠程同步的rsync命令,區別是裏面嵌入了登陸密碼,因此可以不需要和用戶交互直接完成文件的同步。expect eof 的作用是讓遠程連接保持一個狀態,不加的話會在同步未完成時,直接斷開。

腳本五:

指定host和要同步的文件

#!/usr/bin/expect
set passwd "123456"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file [email protected]$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof

備註:該腳本的功能是將本地文件同步到遠程主機上,定義了兩個參數,第一個是運程主機ip,第二個是要同步的文件名。該文件必須在本地存在,執行腳本時,該文件名參數要使用絕對路徑。
chmod a+x 5.expect
./5.expect 192.168.226.130 "/tmp/12.txt"

Linux學習總結(六十三)expect腳本上