2012-04-12 144 views
3

更改Unix的远程服务器上的密码,我attemping使用phpseclib通过其NET_SSH2功能改变我的远程服务器的密码。以下是我正在使用的。通过PHP SSH

<?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]'); 

    ?> 

每次我的脚本只是挂起,似乎没有做任何事情。我在这里可能会做错什么?

下面是这个文档: http://phpseclib.sourceforge.net/documentation/net.html

+2

如果你运行你的程序der'strace(1)',它的_dees_读的确切字符串是什么?你为什么不等待最初的shell提示?如果您添加调试'echo'语句,它究竟在哪里停滞? – sarnold 2012-04-12 03:20:32

+0

原来我大写了一个p字母。现在就像魅力一样。感谢您的详细回复。 – user1328041 2012-04-12 04:41:30

+2

@ user1328041如果你自己发现答案,然后随意删除的问题,这样其他人就不会读它 – Novellizator 2012-04-12 22:51:39

回答

2

这可能会帮助你

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

您可以通过shell_exec函数执行任何Linux命令

1

这应该工作,你

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

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

    echo $ssh->read('[email protected]:~$'); 
    $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.'); 

?> 
+0

谢谢,这对我很好! – Petrik 2016-02-29 14:03:59