Hi all,
I’m trying to automate a password reset via telnet for a report. This
happens twice per year, and right now I’m handling things manually. My
attempts so far have been unsuccessful. Here’s what I’ve tried:
require ‘net/telnet’
include Net
session = Telnet.new(“Host” => host, “Output_log” =>
‘ftp_test.output’)
session.login(user, pass)
session.cmd(“passwd”)
#session.cmd(“String” => “passwd”, “Match” => /password:/i) # Tried
this, too
session.puts(“old_password”)
session.puts(“new_password”)
session.puts(“new_password”)
session.close
But, this doesn’t seem to work. The output file shows that it’s
waiting for the current password, but the program fails with a timeout
error. If I use the second cmd variant that I showed above, the script
fails silently.
Any ideas?
Thanks,
Dan
On Jul 10, 10:58 am, Daniel B. [email protected] wrote:
Hi all,
I’m trying to automate a password reset via telnet for a report. This
happens twice per year, and right now I’m handling things manually. My
attempts so far have been unsuccessful.
The documentation from Perl’s Net::Telnet module suggested, for
interactive programs, to always use puts/print + waitfor. So, I went
with that approach. Here’s what ultimately succeeded:
require ‘net/telnet’
include Net
session = Telnet.new(“Host” => host)
session.login(user, “XXXX”)
session.puts(“passwd”)
session.waitfor(/existing login password:\s*/im)
session.puts(current_password)
session.waitfor(/new password:\s*/im)
session.puts(new_password)
session.waitfor(/new password:\s*/im)
session.puts(new_password)
session.waitfor(/password successfully changed/) # !!!
session.close
Note the multi-line regexes - that was crucial. Also, be sure to wait
for the success message. If you don’t your session will close too
early and it will appear that your program succeeded, when in fact it
did not.
Regards,
Dan