2016-02-15 23 views
0

我想通过SSH连接登录几个设备。我想抓住,如果我有用户可以登录或不。如果是,请继续执行一些命令,如果没有退出脚本。无论我是否有权限,我都需要在日志中写入。有条件的国家

这是我的代码:

#!/usr/bin/expect -f 

set timeout 10 


set host [lindex $argv 0] 
set user "username" 
set pwd "blahblahblah" 
set devicename [lindex $argv 1] 

set DATE [exec date +%Y-%m-%d_%H:%M] 

set log_devicename [open log_$devicename.txt "a+"] 


spawn ssh -p 20444 [email protected]$host 
log_user 0 

expect { 
     "*assword: " { 
       send "$pwd\r"; 
       expect "Permission denied, please try again." {puts $log_devicename "User $user does not have access to $host-$devicename at $DATE";exit 22} 
       expect ">" {send "display startup\r"} 
       expect ">" {send "quit\r";puts $log_devicename "User $user have successful access to $host-$devicename at $DATE"} 
       expect "timeout" {puts $log_devicename "$host - $devicename it's not reachable at $DATE cannot execute StartUp Script";exit 111} 
       exp_continue 
        } 

       eof 
     } 

特的问题,我有,当我有机会获得该检查的第一行,如果有什么问题想出了错误,但完成的预期是正确的它,我可以在日志中写下'一切都好,但是有这个错误。

 
expect: continuing expect after update expect: spawn id exp7 not open 
    while executing 
"expect { 
     "*assword: " { 
       send "$pwd\r"; 
       expect "Permission denied, please try again." {puts $log_devicename "Us..." 
    (file "test.exp" line 19) 

我有工作或不工作的LOG就是这样。

根@ servidor:在/ var/WWW/RED_CENTRAL /性能/ IP_Engine#更 LOG/LOG_DEVICES/log_HIPODR-MEX9039-X8-CA.txt用户registrotpe有 到10.XXX.XX.XX成功访问-HIPODR-MEX9039-X8-CA在 2016-02-15_14:24

根@ servidor:在/ var/WWW/RED_CENTRAL /性能/ IP_Engine#更 LOG/LOG_DEVICES/log_BENJUA-MEX9297-X8-CA。 txt用户registrotpe does 无权访问10.XXX.XX.XX-BENJUA-MEX9297-X8-CA 2016-02-15_14:39

我已经尝试在调试模式下执行,但我无法找到解决方案。

请问您能帮我吗?

回答

1

你的问题是在错误消息中:“spawn id exp7 not open”。您需要处理脚本中的连接问题。这里是我用于telnet连接的一个,同样的timeouteof关键字也应该适用于SSH:

spawn /usr/bin/telnet $hostname 

# Allow this script to handle connection issues 
expect { 
    timeout { 
     send_user "\nTimeout - Check $hostname\n\n"; 
     exit 1 
    } 
    eof { 
     send_user "\nConnection failed - Check $hostname\n\n"; 
     exit 1 
    } 
    "*#" { 
    } 
    "*sername:" { 
     send "$username\n" 
     expect "*assword:" 
     send "$password\n" 
    } 
}