1

リモートLinuxマシンのrootパスワードを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";

しかし、残念ながらそれは機能しません。誰か助けてくれませんか?

4

2 に答える 2

4

Net :: OpenSSHディストリビューションには、まさにあなたが望むことを実行するサンプルスクリプトが含まれています!

change_passwd.pl

于 2011-05-31T14:11:22.153 に答える
0

エラーを破棄する代わりに、次を使用しますcapture2

($ output、$ errput)= $ ssh-> caption2(\%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:もちろん、エラーをチェックして何が起こっているかを確認してください。デバッグ中のエラーの破棄はBadPractice(tm)です。

ETA2:の--stdinオプションを使用してみて、passwdそれが役立つかどうかを確認してください。例えば:

$ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd --stdin" );
于 2011-05-31T08:44:08.587 に答える