Linux學習總結(六十三)expect腳本上
阿新 • • 發佈:2018-06-16
ifconfig UC 表示 用戶交互 絕對路徑 用戶 inter 制作 pass expect是Unix系統中用來進行自動化控制和測試的軟件工具,由Don Libes制作,作為Tcl腳本語言的一個擴展,應用在交互式軟件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等
yum install -y expect
yum install -y expect
腳本一:
自動遠程登錄
#! /usr/bin/expect set host "192.168.226..130" set passwd "123456" spawn ssh root@$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 $user@$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 root@$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腳本上