KpyM Telnet/SSH Server - Forum
Expect & KTS |
GlennS |
Expect & KTS |
Dec 21 2009 18:52 |
|
I am trying to use EXPECT on the *Nix server to connect and run processes on the PC.
Using Pipe_mode=0, the login would work, but (I believe) because of the graphics mode, EXPECT could not see the ">" prompt response.
Using Pipe_mode=1, the initial connection welcome message wasn't displayed, and Expect still couldn't see the prompt.
Has anyone successfully used Expect with KTS? any suggestions?
thanx
GlennS
|
Kroum Grigorov |
|
Dec 24 2009 16:30 |
|
> Using Pipe_mode=1, the initial connection welcome message wasn't displayed, and Expect still couldn't see the prompt.
Does it work OK when you use your ssh/telnet client instead the Expect script?
You might try to hit enter couple of times after you login in your expext script and then check for the prompt.
Kroum
|
GlennS |
|
Jan 19 2010 17:17 |
|
I ended up having to change EXPECT to look for more than just ">" as an initial prompt, then it would take just the ">" prompt.
Thanx much for the great work (still looking forward to public/private keys ;)
see fix below:
---------------------- winssh.exp
#!/usr/bin/expect
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
if {$argc < 2 || $argc > 3} {
puts "usage: winssh.exp <ip_address> <command_file> \[command_sleep\$
exit 1
}
# Getting arguments
set host [ lindex $argv 0 ]
set password "password"
set cmdfilename [ lindex $argv 1 ]
if {$argc == 3} {
set cmdsleep [ lindex $argv 2 ]
} else {
set cmdsleep 0
}
# Starting connection
set username "user"
set prompt ">"
set cmdfile [ open "$cmdfilename" "r" ]
# timeout 40 works, but slow
set timeout 30
spawn ssh $username@$host
match_max 100000
#
# If successful, the "user>" prompt will allow the cmdfile.WIN to proceed
## note KTS "allusers.bat" has a cd %USERPROFILE% line in it.
# If 'route to host' is found, EXIT-1 will tell the wrapper to abort that PC attempt
# If 'timeout (10sec)' is found, it throws EXIT-2, which will be interpretted by wrapper as "try Telnet"
# If 'Refused' is found, it throws EXIT-3, which will be logged for the end of the wrapper
# routine, and suggest retry.
#
while 1 { expect {
"(yes/no)? " {send -- "yes\r"}
"assword: " {send -- "$password\r"}
"user>" {break}
"route to host" {send_user "PC doesn't Exist\r"; exit 1}
timeout {send_user "Unable to connect\r"; exit 2}
"refused" {send_user "PC Isn't ready, Logging as refused.\r"; exit 3}
} }
while {[gets $cmdfile cmdline] != -1} {
expect "$prompt"
send -- "$cmdline\r"
sleep $cmdsleep
}
expect eof
close $cmdfile
-----------------------------------------------------
-----------------------------------------------------file.win contains (or anything else):
cd \
dir
exit
-----------------------------------------------------
syntax:
winssh.exp [ip] file.win
|
© 2007 - 2008 Kroum Grigorov