expect實現無交互登錄

1.expect實現無交互登錄

​ expect是一個用來實現自動交互功能的軟件套件。如果你想寫一個能自動處理輸入輸出的腳本(如向用戶提問並且驗證密碼),又不想面對C或者Perl,那麼expect是你最好的選擇。它可以用來做一些Linux下無法做到交互的一些命令操作。

1.1 expect軟件的安裝

[root@CentOS7 ~]# yum -y install expect

1.2 使用expect創建腳本的方法

expect腳本可以接受從bash傳遞過來的參數,可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個……參數。

1.定義腳本執行的shell#!/usr/bin/expect****

​ 這裏定義的是expect可執行文件的鏈接路徑(或真實路徑),功能類似於bash等shell功能。

2.set timeout 30

​ 設置超時時間,單位秒。如果設置爲timeout -1爲永不超時。

3.spawn

​ spawn是進入expect環境後才能執行的內部命令。如果沒有安裝expect或者直接在默認的Shell下執行是找不到spawn命令的。不能直接在默認的shell環境中進行執行主要功能,它的主要功能是給ssh運行進程加個殼,用來傳遞交互指令。

4.expect

​ 這裏的expect通常是expect的內部命令。用於判斷結果是否包含某項字符串,沒有則立即返回,否則就等待一段時間後返回,等待時間通過timeout進行設置。

5.send

​ 執行交互動作,將交互要執行的動作進行輸入給交互指令。命令字符串結尾要加上“\r”,如果出現異常等待的狀態可以進行覈查。
6.exp_continue

​ 繼續執行接下來的交互操作。

7.interact

​ 執行完後保持交互狀態,把控制權交給控制檯,如果不加這一項,交互完成會自動退出。

1.3 SSH免密登錄(不是使用密鑰)

[root@Centos7 ~]# vim expect.sh 

#!/usr/bin/expect
#定義變量
set ip 192.168.146.102
set name root
set pass zmzsl
set timeout 30
#開啓一個程序
spawn ssh $name@$ip

#捕獲相關內容
expect {
        "(yes/no)?" { send "yes\r";exp_continue }
        "password:" { send "$pass\r" }
}
expect "#"
send "touch /root/a.txt\r"
#結束
expect eof

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WbNz3EBc-1583999281595)(C:\Users\YCY\AppData\Roaming\Typora\typora-user-images\image-20200312153723552.png)]

1.4 expect腳本定義位置參數

​ expect腳本可以接受從bash傳遞過來的參數,可以使用[lindex $argv n]獲得,n從0開始,分別表示第一個,第二個,第三個……參數。

[root@Centos7 ~]# vim expect.sh 

#!/usr/bin/expect
set ip [ lindex $argv 0 ]
set name [ lindex $argv 1 ]
set pass [ lindex $argv 2 ]
set timeout 30
spawn ssh $name@$ip

expect {
        "(yes/no)?" { send "yes\r";exp_continue }
        "password:" { send "$pass\r" }
}
expect "#"
send "touch /root/a.txt\r"
expect eof

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZEXPc69T-1583999281597)(C:\Users\YCY\AppData\Roaming\Typora\typora-user-images\image-20200312153813279.png)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章