#!/usr/bin/perl use strict; use warnings; use Net::SSH::Expect; my $ssh = Net::SSH::Expect-> new ( host => "10.10.10.10", password => "current_password", user => "root", raw_pty => 1, timeout => 10, log_file => "log_file" # this line actually got my head spinning in right direction ); my $login_output=$ssh->login(); if ( $login_output =~ /Last/ ) { print "The login for ROOT was successful, Let's see if we can change the password \n"; $ssh->send("passwd"); $ssh->waitfor ('password:\s*', 10) or die "Where is the first password prompt??"; $ssh->send("new_password"); $ssh->waitfor ('password:\s*', 10) or die "Where is the Second password promp??"; $ssh->send("new-password"); $ssh->waitfor('passwd:\s*',5); # And this was the kicker, I was missing this in my original script print "The password for ROOT has been changed successfully \n"; } else { die "The log in for ROOT was _not_ successful.\n"; }