通过PHP SSH更改Unix远程服务器的密码

通过PHP SSH更改Unix远程服务器的密码,php,unix,ssh,passwords,Php,Unix,Ssh,Passwords,我正试图使用phpseclib通过其NET_SSH2功能更改远程服务器的密码。下面是我正在使用的 <?php require_once('Net/SSH2.php'); $ssh = new Net_SSH2('server1.server.com'); if (!$ssh->login('user', 'pass')) { exit('Login Failed'); } $ssh->write("passwd

我正试图使用phpseclib通过其NET_SSH2功能更改远程服务器的密码。下面是我正在使用的

    <?php
    require_once('Net/SSH2.php');

    $ssh = new Net_SSH2('server1.server.com');
    if (!$ssh->login('user', 'pass')) {
        exit('Login Failed');
    }

    $ssh->write("passwd\n");
    $ssh->read('(current) UNIX Password:');
    $ssh->write("oldpass\n");
    $ssh->read('New password:');
    $ssh->write("newpass\n");
    $ssh->read('Retype new password:');
    $ssh->write("newpass\n");
    echo $ssh->read('[prompt]');

    ?>

每次我的脚本挂起,似乎什么都没做。我有什么地方做错了吗

以下是关于此的文档:

这可能会对您有所帮助

<?php
$output = shell_exec('sudo passwd root');
echo "<pre>$output</pre>";
?>


您可以通过
shell\u exec
函数执行任何linux命令

这应该适合您



如果在
strace(1)
下运行程序,它读取的确切字符串是什么?为什么不等待最初的shell提示呢?如果添加调试
echo
语句,它到底在哪里暂停?结果是我将一个p字母大写。现在很有魅力。感谢您的详细回答。@user1328041如果您自己找到并回答了,请随意删除该问题,这样其他人就不会阅读了it@user1328041:请在下面添加您的解决方案作为答案并接受它。您需要在“$ssh->write”之前添加“$ssh->read”。我把代码贴在下面。
<?php
    include('Net/SSH2.php');

    $ssh = new Net_SSH2('www.domain.tld');
    if (!$ssh->login('username', 'password')) {
        exit('Login Failed');
    }

    echo $ssh->read('username@username:~$');
    $ssh->write("passwd\n");
    echo $ssh->read('(current) UNIX password:');
    $ssh->write("oldpassword\n");
    echo $ssh->read('New UNIX password:');
    $ssh->write("newpassword\n");
    echo $ssh->read('Retype new UNIX password:');
    $ssh->write("newpassword\n");
    echo $ssh->read('passwd: all authentication tokens updated successfully.');

?>