Как изменить пароль root на удаленной машине с помощью Net :: OpenSSH? - PullRequest
1 голос
/ 31 мая 2011

Я хочу изменить пароль root на удаленной машине Linux с помощью скрипта Perl.Моей первой попыткой был следующий код:

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new(
    "linuxpc",
    user                  => "root",
    password              => "root",
    master_stderr_discard => 1
);
my @changepass = $ssh->capture(
    {
        stderr_discard => 1,
        stdin_data     => "newpw123"
    },
    "passwd"
);
print "Done\n";

Но, к сожалению, это не сработает.Может ли кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 31 мая 2011

Net :: OpenSSH включает в себя пример сценария, который делает именно то, что вы хотите!

change_passwd.pl

0 голосов
/ 31 мая 2011

Вместо того, чтобы отбрасывать ваши ошибки, используйте 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" );
...