2012-04-12 143 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