簡體   English   中英

用phpseclib解析“ passwd”命令

[英]Parse “passwd” command with phpseclib

我試圖使用phpseclib將“ passwd”命令解析到我的機器上,但是無法通過第一個密碼輸入。 看下面的代碼。

$ssh->write("
    passwd $new_user\n
    $new_user_pw\n
    $new_user_pw\n 
"); 
$ssh->setTimeout(5);
echo $ssh->read('root@machine:~$');

我得到的輸出是:

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: 

還是我可以用其他方式做到這一點?

謝謝

好,我把它修好了。

此代碼有效:

$ssh->enablePTY(); 
        $ssh->exec('passwd $new_user'); 
        echo $ssh->read('password:'); 
        $ssh->write("$new_pw\n"); 
        $ssh->setTimeout(3); 
        $ssh->write("$new_pw\n"); 
        $ssh->setTimeout(3); 
        echo $ssh->read('password changed');

如果您自己設置密碼,則系統會提示您輸入舊密碼,然后再設置新密碼。 在我的Linux系統上,如果沒有root用戶,就無法對另一個用戶進行passwd操作。 這也可能會提示您輸入密碼。

通常,我發現提示的方法是通過使用空的$ ssh-> read()調用$ ssh-> setTimeout()。 例如。

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

輸出Enter new UNIX password: 因此,我以此方式重寫了程序:

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

輸出Retype new UNIX password: 因此,我隨后相應地修改了程序:

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

輸出passwd: password updated successfully 現在我知道它可以工作了,我刪除了$ ssh-> setTimeout(3)並更新了最后一個$ ssh-> read()來獲取此信息:

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

就是這樣! 它將像您的版本一樣更改密碼,而無需等待六秒鍾。 最后的$ ssh-> read()可能不是必需的。 我會讓你玩這個。

使用單個襯管是更好的選擇。 我更喜歡使用這個:

$username = 'root';
$password = 'myReallySecurePassword';
$ssh->exec(sprintf('echo "%s" | sudo passwd --stdin %s', $password, $username));

以上適用於大多數現代Linux發行版。 如果您無法以某種方式更改密碼並無法運行舊版Linux發行版,請嘗試以下操作:

$username = 'root';
$password = 'myReallySecurePassword';
$ssh->exec(sprintf('echo -e "%s\n%s" | passwd %s', $password, $password, $username));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM