kdamundson has asked for the wisdom of the Perl Monks concerning the following question:

OK, I'm back. I now have this module in place and it fails when running the cmd.


 my ($server, $newpass) = @_;
   my $ssh = Net::OpenSSH->new($server);
   my $userstr = "root" . "\:" . "$newpass";
   my $cmd = "echo $userstr | /usr/sbin/chpasswd";
#  $ssh->system("$cmd");
   $ssh->system({quote_args => 1}, $cmd);
   if ($ssh->error)
   {
      Logit(*DBLOG,"FAILED: Remote SSH cmd\n");
      return (1);
   }
   return (0,"$ssh->error");

The error from running the sytem command is:

bash: echo root:3\%vdm7cl | /usr/sbin/chpasswd: No such file or directory


The \ in front of the % is to escape a special character. This exact command works from the command line. It seems the module is not passing soemthing correctly to the shell, but the printout certainly looks good.

Replies are listed 'Best First'.
Re: Net::OpenSSH error
by salva (Canon) on Mar 31, 2011 at 21:11 UTC
    Try:
    $ssh->system({stdin_data => $userstring}, "/usr/sbin/chpasswd");
    or
    $ssh->system("echo", $userstring, \\"|", "/usr/sbin/chpasswd")
      Thanks for the help. To get it to work, I needed to embed single quotes around the "userstring".
      Thanks, I got it to work. It required putting single quotes around the command that is piped to chpasswd