1. 程式人生 > >mac或linux下的expect用法

mac或linux下的expect用法

        Expect命令是一個用來處理互動的命令。藉助Expect,我們可以將互動過程中的一些動作(例如,登入跳轉機等)寫在一個指令碼上,使它能夠自動完成登入或其他動作。前提是mac使用ssh遠端登入沒有儲存密碼或自動登入的功能,因此使用expect指令碼的形式實現,保證mac上已經安裝了expect(brew install expect)。     首先,先整體看一下檔案內容混個臉熟,又個整體的概念及瞭解,如下

#!/usr/bin/expect -f

if {$argc < 1} {
    send_user "usage: $argv0 <token number>"
    exit
}

set timeout 31
set pwd [lindex $argv 0]
set pin 123456
set username yaowang

spawn ssh ${username}@relay01.sftcwl.com
expect  "*assword:*"
send "${pin}${pwd}\r"
expect "* "
send "ssh gz-op-admin01.gz.xxxxxx.com\r"
send "\r"
interact

        接下來,在解釋各個行或命令符號的意義。Expect中最關鍵的是send、spawn、expect、interact四個命令。

        send:向程序中傳送字串或者指定的密碼 | 使用者名稱等的組合字串

        expect:從程序中讀取字串,例如可以讀取使用者登入的密碼等

        spawn:此命令可以啟動新的程序操作

        interact:表示允許使用者進行互動操作

        1、其中,第一行【 #!/usr/bin/expect -f 】,這一行的意義是告訴作業系統腳本里的程式碼使用哪一個shell來執行,這裡expect和linux下的bash、windows下的cmd是一樣的。需要放在指令碼中的第一行。

        2、第二行是校驗輸入引數個數是否符合,如果輸入引數小於1,也即沒有輸入引數的話,則會報錯並退出。

        3、使用set命令設定一些基本的引數,如超時時間(單位:S。-1表示永遠不會超時)。set pwd [lindex $argv 0] 表示接收密碼pwd,$argv 陣列的第一個引數為輸入的密碼。pin碼和username等寫死引數等。

        4、接下來說一下比較重要的spawn命令。【 spawn ssh ${username}@relay01.sftcwl.com 】有時候我們希望可以和某一個程序進行互動,spawn命令就是用來啟動新的程序。send和expect命令都是和spawn開啟的程序進行互動的。如果沒有安裝expect或者直接在預設的shell下面執行是無法找到spawn命令的。我們可以理解為spawn的主要功能就是給ssh的執行加個外殼,用它來傳遞互動指令。

       5、【 expect  "*assword:*" 】expect命令用來從程序收取字串“password”或者“Password”,例如我們在使用item2登入跳轉機的時候,程序會返回一個字串“Password”,expect就是用來接收它的。如果返回的值不匹配的話,程序就會等待我們設定的時間後返回(例如 31S)。expect "#"  命令執行完, 你要期待一個結果, 結果就是返回shell提示符了(是# 或者$)

       6、【 send "${pin}${pwd}\r" 】 send命令用來執行互動動作,簡單的說就是接收一個字串引數,並將該引數傳送到程序,與手動輸入密碼的動作一樣,命令字串的結尾一定要加上“\r”。

       7、【 interact 】執行完成後保持互動狀態,將控制權交給控制檯,可以進行手工操作了。如果沒有這一行指令的話,登入完成後會退出,而不是留在遠端終端上。寫成 interact 的最大好處是登入後不會退出,而會一直保持會話連線,可以後續手動處理其它任務,請根據實際情況自行選擇了。

      8、【 exp_continue 】有時候,在進行互動的時候,會出現提示操作【 "*yes/no" { send "yes\r"; exp_continue}】此時,使用exp_continue命令就是讓指令碼繼續向下執行指令。

相關推薦

maclinuxexpect用法

        Expect命令是一個用來處理互動的命令。藉助Expect,我們可以將互動過程中的一些動作(例如,登入跳轉機等)寫在一個指令碼上,使它能夠自動完成登入或其他動作。前提是mac使用ssh遠端登入沒有儲存密碼或自動登入的功能,因此使用expect指令碼的形式實

關於MacLinuxGO的Permission denied提示錯誤

錯誤 chm lin pan int 提示 key 有時 linu 有時候當你下載第三方庫的時候,編譯時會提示Permission denied 權限不足, 出現這種錯誤因為權限不夠。其中一種辦法是需要把你項目目錄和go的pck、bin權限放開。 chmod -R

解決Mac Linuxvirtalbox安裝centos7沒有分配ip地址問題

發現問題 windows下使用virtalbox安裝centos7配置網路正常,但在mac或者Linux系統下使用virtalbox安裝centos7配置網路後,虛擬機器無法得到分配的ip地址 經過上面的設定後,啟動centos7虛擬機發現沒有正

linuxmd5sum用法 (查看文件字符串的md5值)

一般來說 生產 ech mes warn md5算法 換行符 tab鍵 bin MD5算法常常被用來驗證網絡文件傳輸的完整性,防止文件被人篡改。MD5 全稱是報文摘要算法(Message-Digest Algorithm 5),此算法對任意長度的信息逐位進行計算,產生一

linuxmd5sum用法 (檢視檔案字串的md5值)

  MD5演算法常常被用來驗證網路檔案傳輸的完整性,防止檔案被人篡改。MD5 全稱是報文摘要演算法(Message-Digest Algorithm 5),此演算法對任意長度的資訊逐位進行計算,產生一個二進位制長度為128位(十六進位制長度就是32位)的“指紋”(或稱“報文摘要”),不同的檔案產生

mac linux上 pip 不支持ssl的問題

pip ssl報錯:pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.新版的pip 默認要求使用https源了,pip 的源可以使用國內的源,下載速度

linuxexpect命令實現批量ssh免密

輸入 left 防止 輸出 one 時間 line jdb eof 有時候我們需要批量發送ssh命令給服務器,但是有可能有些服務器是新加入的,還沒有配置ssh免密,這個時候就會提示我們輸入yes/no 或者password等,expect腳本命令就是用於在提示這些的時候

Linux expect 指令碼語言中互動處理常用命令

Linux 下 expect 指令碼語言中互動處理常用命令 Linux 下 expect 指令碼語言中互動處理常用命令 1. #!/usr/bin/expect 告訴作業系統腳本里的程式碼使用那一個 shell 來執行。這裡的 expect 其實和 Linux 下的 bash、win

maclinux使用Docker,部署SpringBoot專案到docker

主要是看一下如何在linux及mac上安裝docker,建立docker映象,部署SpringBoot專案到docker,並藉助於DaoCloud進行docker映象下載加速等。我用的電腦是mac,本身並不支援docker,需要安裝Docker ToolBox才能使用Dock

linuxrename用法--批量重新命名 轉

原文地址:https://www.cnblogs.com/hester/p/5615871.html Linux的rename 命令有兩個版本,一個是C語言版本的,一個是Perl語言版本的,早期的Linux發行版基本上使用的是C語言版本的,現在已經很難見到C語言版本的了, 由於歷史原因,在Perl語言大紅大

Linux cut用法總結

CUT cut 顧名思義,就是切~~是一個選取命令,其功能是將檔案中的每一行,“位元組” “字元” “欄位” 進行剪下,選取我們需要的,並將這些選取好的資料輸出至標準輸出。 create two new document to display #ca

linuxautomake用法

作為Linux下的程式開發人員,大家一定都遇到過Makefile,用make命令來編譯自己寫的程式確實是很方便。一般情況下,大家都是手工寫一個簡單Makefile,如果要想寫出一個符合自由軟體慣例的Makefile就不那麼容易了。   在本文中,將給大家介紹如何使用 auto

linuxrdesktop用法

我自己用的引數rdesktop -g workarea -D -r clipboard:PRIMARYCLIPBOARD -a 16 -x lan 192.168.1.2 rdesktop是Linux下一個好用的用來連線Windows遠端桌面(當然不僅僅在於此,只要是基於R

linuxgrep用法

linux grep命令 不定時更新中。。。 一、作用 百度 二、格式 grep [options] ‘pattern’ filename 三、option主要引數 下面所列的引數主要是一些常

ubuntulinux找不到apache伺服器配置檔案httpd.conf

原因是ubuntu中是apache2,沒有httpd.conf檔案,所有找不到。 我的是ubuntu14.04系統,apache2配置檔案在/etc/apache2/apache2.conf中, 如果你的不是在這個目錄下,可以通過此命令查詢:find / -name 

Linux命令行svn ignore忽略文件文件夾用法

let export 方式 同時 oca 現在 rect strong pos Linux命令行下svn ignore忽略文件或文件夾用法 一、忽略單個目錄 1、忽略文件夾 假如目錄oa.youxi.com是從svn checkout出來的,在服務器本地目錄添加了m

Linux 檢視區域網內所有主機IP和MAC(及nmap的用法)

        用namp對區域網掃描一遍,然後檢視arp快取表就可以知道局域內ip對應的mac了。namp比較強大也可以直接掃描mac地址和埠。執行掃描之後就可以 cat /proc/net/arp檢視arp快取表了。 進行ping掃描,打印出對掃描做出響應的主機:

(轉)Linux內存映射文件的用法簡介

target 共享 文件 知識 i/o 共享數據 log 需要 使用 簡介: 內存映射文件與虛擬內存有些類似,通過內存映射文件可以保留一個地址空間的區域,同時將物理存儲器提交給此區域,只是內存文件映射的物理存儲器來自一個已經存在於磁盤上的文件,而非系統的頁文

linux 的局域網斷網攻擊arp欺騙

pro 圖片 war 目標 掃描 關閉 主機 斷網 sys arp欺騙: /*正常情況下 電腦是將流量發送到網關 而欺騙後 則將流量傳到此機器的網卡上 再由此機器進行轉發至網關*/ --》 first: 使用fping -asg ip段/*掃描段內存活的主機*/ --》

windows和Linux定時啟動關閉服務

ref sta article start 處理程序 window pin blog win http://blog.csdn.net/clare504/article/details/17410643 1、Windows下的定時啟動程序可以采用系統的計劃和任務,定時