如果您对自己进行密码,系统会提示您输入旧密码,然后才能设置新密码。在我的 Linux 系统上,如果不执行 root,我无法对另一个用户执行 passwd。这可能会导致您也被提示输入密码。
作为一般规则,我发现提示的方法是通过 $ssh->setTimeout() 使用空的 $ssh->read() 调用。例如。
$ssh->enablePTY();
$ssh->exec('sudo passwd testuser');
$ssh->setTimeout(3);
echo $ssh->read();
那输出Enter new UNIX password:
。所以我重写了我的程序:
$ssh->enablePTY();
$ssh->exec('sudo passwd testuser');
$ssh->setTimeout(3);
$ssh->read('password:');
$ssh->write("newpw\n");
echo $ssh->read();
那输出Retype new UNIX password:
。所以我然后相应地修改我的程序:
$ssh->enablePTY();
$ssh->exec('sudo passwd testuser');
$ssh->setTimeout(3);
$ssh->read('password:');
$ssh->write("newpw\n");
$ssh->read('password:');
$ssh->write("newpw\n");
echo $ssh->read();
那输出passwd: password updated successfully
。现在我知道它有效,我删除了 $ssh->setTimeout(3) 并更新了最后一个 $ssh->read() 来得到这个:
$ssh->enablePTY();
$ssh->exec('sudo passwd testuser');
$ssh->read('password:');
$ssh->write("newpw\n");
$ssh->read('password:');
$ssh->write("newpw\n");
$ssh->read('passwd:');
就是这样!它会更改密码,而无需像您的版本那样等待六秒钟。不过,最后一个 $ssh->read() 可能不是必需的。我会让你玩弄那个。