1. 程式人生 > >分發系統介紹、expect腳本遠程登錄、登錄執行命令後退出、腳本傳遞參數

分發系統介紹、expect腳本遠程登錄、登錄執行命令後退出、腳本傳遞參數

expect

分發系統介紹

shell項目-分發系統-expect (expect也是一種腳本語言)

使用expect 可以實現文件傳輸和遠程登錄


二、expect腳本遠程登錄

1. 安裝expect:

yum install -y expect


技術分享圖片

2.編寫expect腳本:

vim /usr/local/sbin/1.expect

內容:

#! /usr/bin/expect
set host "192.168.136.134" //設置變量host
set passwd "123456" //設置變量passwd
spawn ssh root@$host

expect {
"yes/no" { send "yes\r"; exp_continue} //一般我們在遠程登陸一臺機器的時候會在輸入密碼的 時候提示“yes/no“關鍵字再輸入yes後才可以輸入密碼。這裏首先是截取”“yes/no”關鍵字然後執行send“yes\r”(\r表示回程)
"assword:" { send "$passwd\r" }
}
interact

(interact:表示登錄遠程機器後保留在登錄的機器。如果不加這個interact,則登錄後立馬退出。或者使用 expect eof 這個命令,則會在登錄機器後的2-3s後退出)

3.修改腳本權限:

chmod a+x one.expect


執行命令: ./one.expect

技術分享圖片


註意:在腳本中要註意的是(1)符號的大小寫(2)在expect{}的“{ ”要和expect有空格

三、 expect腳本遠程執行命令

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

1.腳本內容:

#!/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"

技術分享圖片


2.編寫完腳本,修改腳本權限:

chmod a+x two.expect


3.執行腳本,判斷是否會在登陸後執行完命令退出登錄

./two.expect

技術分享圖片

成功登錄,並完成創建命令最後退出。


四、expect腳本傳遞參數


1.傳遞參數腳本內容:
#!/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"



2.編寫完腳本,修改腳本權限:

chmod a+x three.expect


3.執行腳本 並傳遞參數 ./three.expect root 192.168.136.134 w;ps

表示傳遞用戶名:root ;登錄主機ip和執行的命令w和ps




分發系統介紹、expect腳本遠程登錄、登錄執行命令後退出、腳本傳遞參數