Вместо того, чтобы отбрасывать ваши ошибки, используйте capture2
:
($ output, $ errput) =
$ ssh-> capture2 (\% opts, @cmd)
captures the output sent to both stdout and stderr by @cmd on the
удаленная машина.
Цитируется из CPAN
Также, возможно, не имеет значения, но, возможно, используйте полный путь к passwd
. Я не уверен, добавлена ли новая строка функцией capture
, но, возможно, стоит попробовать:
my @pwd = ("newpw123\n", "newpw123\n");
($output, $errput) = $ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd" );
ETA: И, конечно же, проверьте ошибки , чтобы увидеть, что происходит. Отказ от ошибок при отладке - это плохая практика (tm).
ETA2: Попробуйте использовать опцию --stdin
для passwd
, посмотрите, поможет ли это. E.g.:
$ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd --stdin" );