首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 執行 Linux 指令並啟動 SSH 服務實戰案例

     編輯:PHP 綜合知識

VPS 升級後因 Ubuntu Upstart 與 OpenVZ 相容性問題導致 SSH 服務無法自動啟動。利用 WordPress 後台仍可編輯主題檔案的特性,透過 PHP proc_open 執行 su 指令啟動 sshd 服務,恢復遠端存取。

核心邏輯流程

  1. PHP proc_open 啟動 Python 程序,建立虛擬終端 (pty)。
  2. Python 在 pty 中執行 /bin/sh。
  3. 透過 stdin pipe 發送 su -c 'service ssh start' root 指令。
  4. Shell 執行 su,提示輸入密碼。
  5. sleep 等待提示,再發送 root 密碼。
  6. 關閉管道,結束程序。

實作程式碼 (插入 WordPress header.php 臨時執行)

<?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)) {
    // 發送 su 指令啟動 ssh
    fwrite($pipes[0], "su -c 'service ssh start' root\n");
    fflush($pipes[0]);
    sleep(3); // 等待密碼提示

    // 發送 root 密碼 (請替換為實際密碼)
    fwrite($pipes[0], "YOUR_ROOT_PASSWORD\n");
    fflush($pipes[0]);

    // 清理資源
    fclose($pipes[0]);
    fclose($pipes[1]);
    fclose($pipes[2]);
    proc_close($process);
}
?>

安全性警示 ⚠️

  • 極高風險:程式碼包含明文 root 密碼,執行後必須立即移除。
  • 僅適用於緊急搶修,事後應修正系統服務啟動設定 (systemd/upstart)。
  • 生產環境嚴禁在 Web 可存取路徑執行此類程式碼。
  • 建議改用控制台、VNC、雲端廠商 Serial Console 等正規管道處理。

正規解決方案

# Ubuntu 16.04+ 使用 systemd
systemctl enable ssh
systemctl start ssh

# 檢查服務狀態
systemctl status ssh
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved