2016-01-27 70 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

然后你没有应用我的建议。请显示你的代码。 –