duanqian8867 2014-06-17 16:43
浏览 76
已采纳

使用phpseclib解析“passwd”命令

I tried to parse "passwd" command to my machine with phpseclib but it can't go through the first password typing. Look at the code below.

$ssh->write("
    passwd $new_user

    $new_user_pw

    $new_user_pw
 
"); 
$ssh->setTimeout(5);
echo $ssh->read('root@machine:~$');

Output i got is:

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: 

Or can I do this with another way?

Thanks

  • 写回答

3条回答 默认 最新

  • dongwen5351 2014-06-17 20:23
    关注

    If you do passwd on yourself you'll be prompted for the old pw before being allowed to set the new pw. And on my Linux system I wasn't able to do passwd on another user without doing root. That may result in you being for your prompted for your password as well.

    As a general rule, the way I found out what the prompt is is by doing $ssh->setTimeout() with an empty $ssh->read() call. eg.

    $ssh->enablePTY();
    $ssh->exec('sudo passwd testuser');
    $ssh->setTimeout(3);
    echo $ssh->read();
    

    That outputs Enter new UNIX password:. So I rewrite my program thusly:

    $ssh->enablePTY();
    $ssh->exec('sudo passwd testuser');
    $ssh->setTimeout(3);
    $ssh->read('password:');
    $ssh->write("newpw
    ");
    echo $ssh->read();
    

    That outputs Retype new UNIX password:. So I then revise my program accordingly:

    $ssh->enablePTY();
    $ssh->exec('sudo passwd testuser');
    $ssh->setTimeout(3);
    $ssh->read('password:');
    $ssh->write("newpw
    ");
    $ssh->read('password:');
    $ssh->write("newpw
    ");
    echo $ssh->read();
    

    That outputs passwd: password updated successfully. Now that I know it works I remove the $ssh->setTimeout(3) and update the last $ssh->read() to get this:

    $ssh->enablePTY();
    $ssh->exec('sudo passwd testuser');
    $ssh->read('password:');
    $ssh->write("newpw
    ");
    $ssh->read('password:');
    $ssh->write("newpw
    ");
    $ssh->read('passwd:');
    

    And that's it! It'll change the password without waiting for six seconds like your version does. That last $ssh->read() may not be necessary though. I'll let you play around with that.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • ¥15 Python报错怎么解决
  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了