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 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包