2016-01-02 68 views
-1

所以即時嘗試寫一個腳本,通過SSH自動連接過於複雜的代碼問題

我有三個文件。 首先是文本文件(file.txt的)我的登錄憑據(現在它只有一個,但後來會有幾個):

user1 abcd 

第二個文件(connect.sh)是bash的文件讀取憑據並將他們希望文件是這樣的:

#!/bin/bash 

while IFS='' read -r line || [[ -n "$line" ]]; do 
    count=0; 
    words[0]=""; 
    for word in $line; do 
     words[$count]="$word" 
     count=$(($count + 1)) 
    done 
    myDir="$(dirname "$0")" 
    "$myDir/find.sh" "${words[1]}" 
done < "$1" 

第三個文件(find.sh)是/預期文件,該文件是這樣的:

#!/usr/bin/expect 

set password [lindex $argv 0] 
spawn ssh "[email protected]" 
expect "Password:" 
send "$password\r" 
interact 

然而,當我嘗試登錄它未能提供 密碼。據我檢查密碼是正確發送到期望的腳本。此外,我嘗試設置超時功能,但它也不起作用。

+2

您應該使用SSH密鑰。 –

+2

你讓自己變得更難。期望的是Tcl,一個完整的腳本系統,可以讀取文件,無需調用另一個進程尋求幫助。既然你的bash腳本幾乎什麼都不做(什麼是數字?你不使用它)放棄額外的噪音。在expect腳本中調試'puts'也會有所幫助。 – msw

+2

我不確定發佈時是否發佈了錯字。無論如何,要模擬'enter'鍵,你必須使用'\ r',而不是'/ r'。 – Dinesh

回答

1

由於垃圾指出的那樣,你可以做

#!/usr/bin/expect 

proc main {passfile} { 
    set fh [open $passfile r] 
    while {[gets $fh line] != -1} { 
     lassign [split $line] user pass 
     connect $user $pass 
    } 
    close $fh 
} 

proc connect {user password} { 
    spawn ssh [email protected] 
    expect "Password:" 
    send "$password\r" 
    interact 
} 

main [lindex $argv 0] 

然後用密碼文件

./test.exp file.txt 

順便說一句,「.SH」是不是一個偉大的擴展使用的調用你的期望腳本預計計劃。