|
升級 VPS 后,由于 Ubuntu 的 upstart 與 OpenVZ 的兼容問題,導(dǎo)致 sshd 服務(wù)不自動(dòng)啟動(dòng)了,在嘗試了 vePortal 的 console 與 file manager 及提交技術(shù)支持后都不能解決問題之后。
只能靠自己了,大概的思路是在 php 中進(jìn)行 su 命令以執(zhí)行 sshd 服務(wù),因?yàn)?WordPress 還活著,并且可以在后臺(tái)直接編輯主題相關(guān)的 php 腳本。只要把準(zhǔn)備好的代碼片斷插入到 header.php 中,并在瀏覽器中訪問一下主頁即可。
相關(guān)的代碼邏輯
1. 使用 php 的 proc_open 打開一個(gè)進(jìn)程,重定向 stdin, stdout, stderr, 這里會(huì)執(zhí)行一個(gè) Python 程序。
2. 在這個(gè) Python 程序中打開一個(gè) pty,并運(yùn)行一個(gè) sh。
3. 利用步驟 1 中重定向的 stdin pipe 向 Python 程序發(fā)送 su 命令, Python 會(huì)將來自 stdin 的命令數(shù)據(jù)寫到入 ptmx,而這時(shí) sh 的 stdin, stdout 及 stderr 是重定向到與 Python 打開的 ptmx 配對的 pts 上的。也就是說 su 命令最終會(huì)轉(zhuǎn)給 sh 進(jìn)程處理。
4. sh 進(jìn)程自然的執(zhí)行了 su 命令,這時(shí) su 進(jìn)程的 stdin, stdout, stderr 也會(huì)被重定向到那個(gè) pts 上。
5. 在 sleep 一段時(shí)間后(主要是等 su 真的跑起來了),再寫入密碼,數(shù)據(jù)流過程與步驟 3、4 一致。
相關(guān)的代碼片斷:
復(fù)制代碼 代碼如下:
<?php
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // stderr
);
$process = proc_open("Python -c 'import pty; pty.spawn(/"/bin/sh/")'", $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], "su -c 'service ssh start' root/n");
fflush($pipes[0]);
sleep(3);
fwrite($pipes[0], "PASSWORD/n");
fflush($pipes[0]);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
}
?>
php技術(shù):在PHP中運(yùn)行Linux命令并啟動(dòng)SSH服務(wù)的例子,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。