write(" passwd $new_user\n $n-6ren">
gpt4 book ai didi

php - 使用 phpseclib 解析 "passwd"命令

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:15 26 4
gpt4 key购买 nike

我试图用 phpseclib 将“passwd”命令解析到我的机器,但它无法通过第一次密码输入。请看下面的代码。

$ssh->write("
passwd $new_user\n
$new_user_pw\n
$new_user_pw\n
");
$ssh->setTimeout(5);
echo $ssh->read('root@machine:~$');

我得到的输出是:

Last login: Tue Jun 17 12:23:01 2014 from 109.175.60.43 [root@machine ~]# [root@machine ~]# [root@machine ~]# passwd 8917f498 Changing password for user 8917f498. New password: 

或者我可以用其他方式做到这一点吗?

谢谢

最佳答案

如果您对自己进行 passwd,系统会提示您输入旧密码,然后才能设置新密码。在我的 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() 可能不是必需的。我会让你尝试一下。

关于php - 使用 phpseclib 解析 "passwd"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com