手机
当前位置:查字典教程网 >编程开发 >php教程 >在PHP中运行Linux命令并启动SSH服务的例子
在PHP中运行Linux命令并启动SSH服务的例子
摘要:升级VPS后,由于Ubuntu的upstart与OpenVZ的兼容问题,导致sshd服务不自动启动了,在尝试了vePortal的consol...

升级 VPS 后,由于 Ubuntu 的 upstart 与 OpenVZ 的兼容问题,导致 sshd 服务不自动启动了,在尝试了 vePortal 的 console 与 file manager 及提交技术支持后都不能解决问题之后。

只能靠自己了,大概的思路是在 PHP 中进行 su 命令以执行 sshd 服务,因为 WordPress 还活着,并且可以在后台直接编辑主题相关的 PHP 脚本。只要把准备好的代码片断插入到 header.php 中,并在浏览器中访问一下主页即可。

相关的代码逻辑

1. 使用 PHP 的 proc_open 打开一个进程,重定向 stdin, stdout, stderr, 这里会执行一个 python 程序。

2. 在这个 python 程序中打开一个 pty,并运行一个 sh。

3. 利用步骤 1 中重定向的 stdin pipe 向 python 程序发送 su 命令, python 会将来自 stdin 的命令数据写到入 ptmx,而这时 sh 的 stdin, stdout 及 stderr 是重定向到与 python 打开的 ptmx 配对的 pts 上的。也就是说 su 命令最终会转给 sh 进程处理。

4. sh 进程自然的执行了 su 命令,这时 su 进程的 stdin, stdout, stderr 也会被重定向到那个 pts 上。

5. 在 sleep 一段时间后(主要是等 su 真的跑起来了),再写入密码,数据流过程与步骤 3、4 一致。

相关的代码片断:

复制代码 代码如下:

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

fflush($pipes[0]);

sleep(3);

fwrite($pipes[0], "PASSWORDn");

fflush($pipes[0]);

fclose($pipes[0]);

fclose($pipes[1]);

fclose($pipes[2]);

proc_close($process);

}

?>

【在PHP中运行Linux命令并启动SSH服务的例子】相关文章:

PHP中预定义的6种接口介绍

在 PHP 中使用随机数的三个步骤

PHP4中实现动态代理

一个PHP+MSSQL分页的例子

在PHP中利用XML技术构造远程服务(下)

PHP中路径问题的解决方案

PHP与已存在的Java应用程序集成

配置最新的PHP加MYSQL服务器

PHP动态图像的创建

PHP中的事务使用实例

精品推荐
分类导航