1. 程式人生 > >利用 expect 免密輸入遠端登入到伺服器,並且執行命令,執行完後並退出mmmi

利用 expect 免密輸入遠端登入到伺服器,並且執行命令,執行完後並退出mmmi

expect 是什麼?

        我們通過Shell可以實現簡單的控制流功能,如:迴圈、判斷等。但是對於需要互動的場合則必須通過人工來干預,有時候我們可能會需要實現和互動程式如telnet伺服器等進行互動的功能。而expect就使用來實現這種功能的工具。類似windows 上的按鍵精靈, AHK(AutoHotkey), mac 上的alfred

expect的安裝

expect是在Tcl基礎上建立起來的,所以在安裝expect前我們應該先安裝Tcl。

(一)Tcl 安裝

  1. wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz  


2.解壓縮原始碼包

  1. tar xfvz tcl8.4.11-src.tar.gz  


3.安裝配置

  1. cd tcl8.4.11/unix  
  2. ./configure --prefix=/usr/tcl --enable-shared  
  3. make  
  4. make install  

注意:
1、安裝完畢以後,進入tcl原始碼的根目錄,把子目錄unix下面的tclUnixPort.h copy到子目錄generic中。

2、暫時不要刪除tcl原始碼,因為expect的安裝過程還需要用。

(二)expect 安裝 (需Tcl的庫)

  1. wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download  


2.解壓縮原始碼包

  1. tar xzvf expect5.45.tar.gz  


3.安裝配置

  1. cd expect5.45  
  2. ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic  
  3. make  
  4. make install  
  5. ln -s /usr/tcl/bin/expect /usr/expect/bin/expect 

案例:免密(免密碼,不用輸入密碼)輸入遠端登入到伺服器,並且執行命令,執行完後並退出

   #!/usr/bin/expect -f
set TARGET [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWD [lindex $argv 2]
set PORT [lindex $argv 3]
set DIR [lindex $argv 4]
set timeout 10

spawn ssh 
[email protected]
$TARGET -p $PORT #'cd /root/' expect { "*yes/no" {send "yes\r"; exp_continue} "*password:" {send "$PASSWD\r"} } #\r 代表回車執行  send "cd $DIR\r" send "pwd\r"  interact

當執行expect指令碼的時候,輸出除錯資訊

當你用“-d”選項執行程式碼的時候,你可以輸出診斷的資訊。如下所示:

更多詳細的,輕檢視[1]教程,或者官網