Perl 如何使用Net::OpenSSH更改远程计算机上的根密码?
我想用Perl脚本更改远程Linux机器上的根密码。我的第一次尝试是以下代码:Perl 如何使用Net::OpenSSH更改远程计算机上的根密码?,perl,ssh,root,change-password,Perl,Ssh,Root,Change Password,我想用Perl脚本更改远程Linux机器上的根密码。我的第一次尝试是以下代码: use Net::OpenSSH; my $ssh = Net::OpenSSH->new( "linuxpc", user => "root", password => "root", master_stderr_discard => 1 ); my @changepass = $ssh->ca
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";
但不幸的是,这行不通。有人能帮我吗?不要放弃你的错误,而是使用
capture2
:
($output,$errput)=
$ssh->capture2(\%opts,@cmd)
远程机器
引自
此外,可能不相关,但可能使用passwd
的完整路径。我不确定capture
函数是否添加了换行符,但值得一试:
my @pwd = ("newpw123\n", "newpw123\n");
($output, $errput) = $ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd" );
ETA:当然,检查错误,看看发生了什么。在调试时丢弃错误是错误的做法(tm)
ETA2:尝试使用--stdin
选项作为passwd
,看看是否有帮助。例如:
$ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd --stdin" );
使用
capture2
,而不是丢弃错误:
($output,$errput)=
$ssh->capture2(\%opts,@cmd)
远程机器
引自
此外,可能不相关,但可能使用passwd
的完整路径。我不确定capture
函数是否添加了换行符,但值得一试:
my @pwd = ("newpw123\n", "newpw123\n");
($output, $errput) = $ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd" );
ETA:当然,检查错误,看看发生了什么。在调试时丢弃错误是错误的做法(tm)
ETA2:尝试使用--stdin
选项作为passwd
,看看是否有帮助。例如:
$ssh->capture2( { stdin_data = \@pwd }, "/bin/passwd --stdin" );
发行版包括一个示例脚本,它完全可以实现您想要的功能
发行版包括一个示例脚本,它完全可以实现您想要的功能
到底是什么不起作用?手动运行“passwd”时会发生什么?您收到了什么错误消息?密码更改无效。如果我在远程linux pc上从命令行手动运行passwd,我会得到插入新密码的提示。按enter键后,我将进入重新输入新密码的对话框。如果您将
stdin_data
更改为newpw123\nneww123
,是否有帮助?否,没有帮助:-(确切地说,什么不起作用?当您手动运行“passwd”时会发生什么?您会收到什么错误消息?密码更改将不起作用。如果我在远程linux pc上从命令行手动运行passwd,我会得到插入新密码的提示。按enter键后,我会得到重新输入新密码的对话框。如果您更改标准数据
至newpw123\nneww123
?不,这没有帮助:-(感谢您的帮助。我尝试了您的解决方案,但出现了根用户密码未更改的错误。我尝试了使用换行符和不使用换行符,但没有成功。@Stefan\n
可能不是表示按ENTER键的正确方式。不确定可能是什么。您可以尝试使用系统而不是捕获。是否应e同样的事情,但谁知道呢。检查manpasswd似乎有一个--stdin
选项。也许这就是您的解决方案,更改为“passwd--stdin”
@TLP此passwd没有stdin选项,因为它是一个最小的linux系统-(嗯,那么我的扣除能力失败了。设置了一些安全选项?例如,在更改为新密码之前,您必须输入您的旧密码,这样上面的@pwd
应该是@pwd=(“root\n”,“newpw123\n”,“newpw123\n”);
?感谢您的帮助。我尝试了您的解决方案,但遇到错误,root的密码没有更改。我尝试了使用换行符和不使用换行符,但没有成功。@Stefan\n
可能不是表示按ENTER键的正确方式。.不确定可能是什么。您可以尝试使用捕获系统而不是捕获。应该是一样的,但谁知道呢。检查manpasswd似乎有一个--stdin
选项。也许这就是你的解决方案,改为“passwd--stdin”
@TLP这个passwd没有stdin选项,因为它是一个最小的linux系统-(嗯,那么我的扣除能力失败了。设置了一些安全选项?例如,在更改为新密码之前,您必须输入您的旧密码,这样上面的@pwd
应该是@pwd=(“root\n”,“newpw123\n”,“newpw123\n”);
?