2016-01-27 120 views
0

我有一個奇怪的問題我試圖SSH連接到腳本里面的遠程設備,所以我可以發送命令給它,但奇怪的是它要求輸入密碼之前的SSH連接我甚至可以調用expect命令。我的片段是這樣的:SSH連接在密碼可以發送之前請求密碼

#!/usr/bin/expect 
set PASS="password" 
echo {$PASS} 
ssh [email protected] -p 4118 #Firewall Device IP 
expect { 
"Password: "  
{send '$PASS\r'} 
} 

和輸出我得到的是這樣的:

password 
Password: 

我不知道爲什麼它表現這樣。

編輯: 我申請通過@glenn傑克曼建議的修改,新的代碼之中:

#!/usr/bin/expect 
    set PASS "peak1234" 
    puts "$PASS" 
    ssh [email protected] -p 4118 #Firewall Device IP 
    expect "Password :"  
    send "$PASS\r" 

這些變化我得到的錯誤:

set: Variable name must begin with a letter. 
+0

學習一點tcl,否則它會太艱難,你會正確地工作。 – Jahid

回答

3

你混淆預計與012

#!/usr/bin/expect 
set PASS "password"  ; ## no "=" 
puts $PASS     ; ## no "echo", braces wrong 
ssh [email protected] -p 4118 
expect "Password: " 
send "$PASS\r"    ; ## single quotes have no meaning in expect/Tcl 
+0

您將受益於Tcl教程:http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html –

+0

我應用了您建議的更改,但出現錯誤'set:變量名必須以一封信。' – Angus

+1

然後你沒有應用我的建議。請顯示你的代碼。 –