expect預期互動

2021-09-23 20:56:12 字數 2528 閱讀 2276

[root@svr5 ~]# which expect //確認expect路徑

/usr/bin/expect

2)準備ssh測試環境

以本機192.168.4.5為例,只要啟用sshd服務,並新增mike使用者即可:

[root@svr5 ~]# service sshd restart

停止 sshd: [確定]

正在啟動 sshd: [確定]

[root@svr5 ~]# useradd mike

[root@svr5 ~]# echo 1234567 | passwd --stdin mike

更改使用者 mike 的密碼 。

passwd: 所有的身份驗證令牌已經成功更新。

步驟二:編寫expect_ssh指令碼,實現免互動登入

1)任務需求及思路分析

在ssh登入過程中,如果是第一次連線到該目標主機,則首先會被要求接受金鑰,然後才提示輸入密碼:

[root@svr5 ~]# ssh [email protected] //連線目標主機

the authenticity of host 『192.168.4.5 (192.168.4.5)』 can』t be established.

rsa key fingerprint is 58:a0:d6:00:c7:f1:34:5d:6c:6d:70:ce:e0:20:f8:f3.

are you sure you want to continue connecting (yes/no)? yes //接受金鑰

warning: permanently added 『192.168.4.5』 (rsa) to the list of known hosts.

[email protected]』s password: //驗證密碼

last login: thu may 7 22:05:44 2015 from 192.168.4.5

[mike@svr5 ~]$ exit //返回客戶端

logout

connection to 192.168.4.5 closed.

在上述過程中,第一次互動發生在出現「… …(yes/no)?」的提示時,需要提供「yes」;而第二次互動發生在出現「… …password:」提示時,需要提供登入使用者的密碼;互動登入成功以後,需要在「[mike@svr5 ~]katex parse error: expected 'eof', got '#' at position 77: …: [root@svr5 ~]#̲ ssh [email protected]… exit //返回客戶端

logout

connection to 192.168.4.5 closed.

綜上所述,應該預先知道ssh連線目標主機的正常互動過程。需要在指令碼中來實現這些互動過程時,就可以利用expect工具,通過spawn指令來建立ssh登入程序,並設定expect指令來識別預期會出現的提示文字、提供相應的文字,甚至進一步傳送相應的子程序互動指令。其中使用者名稱、ip位址可以提前用set設好變數,這樣更加方便。

2)根據實現思路編寫指令碼檔案

指令碼內容參考如下:

[root@svr5 ~]# vim expect_ssh.sh

#!/usr/bin/expect

set host 192.168.4.5 #//定義變數

set user mike

set password 「1234567」

spawn ssh use

r@

user@

user

@host #//建立互動式程序

expect 「password:」 #//自動傳送密…user@」

#//傳送互動式命令

interact #//允許互動式環境

[root@svr5 ~]# chmod +x expect_ssh.sh

3)驗證、測試指令碼

執行指令碼前,目標主機上並沒有/tmp/mike.txt檔案:

[root@svr5 ~]# ls /tmp/mike.txt

ls: 無法訪問/tmp/mike.txt: 沒有那個檔案或目錄

執行expect_ssh.sh自動登入指令碼:

[root@svr5 ~]# expect_ssh.sh

spawn ssh [email protected]

[email protected]』s password:

last login: mon may 11 12:08:47 2015 from 192.168.4.5

pwd > /tmp/mike.txt ; exit

[mike@svr5 ~]$ pwd > /tmp/mike.txt ; exit

logout

connection to 192.168.4.5 closed.

再次檢查目標主機,會看到已經建立了/tmp/mike.txt檔案,說明expect自動登入並遠端執行命令成功:

[root@svr5 ~]# ls -l /tmp/mike.txt

-rw-rw-r–. 1 mike mike 11 5月 11 12:17 /tmp/mike.txt

定義 賦值陣列 expect預期互動

通過 判斷變數是否存在,決定是否給變數賦初始值。例 如果變數x沒有賦值,則預設值為123456。一般用與密碼 定義 賦值陣列 x www ftp mail cluv 0 1 2 3 變數的編號從0開始,空格代表分隔 set grep x 檢視陣列定義結果 x 0 www 1 ftp 2 mail 3...

互動工具使用 expect

目標 執行指令碼自動匹配使用者資訊,自動登陸ssh。條件 ubuntu 10.04 安裝expect 與openssh bash指令碼 bash.sh 內容 bin bash echo hello now you will login ssh echo show me the detail info...

expect 自動互動指令碼

命令列引數 ar 引數陣列,使用 lindex ar n 獲取,ar 0為指令碼名字 argc,引數個數 set username lindex ar 1 獲取第1個引數 set passwd lindex ar 2 獲取第2個引數 set timeout 30 設定超時 spawn是expect內...