在PHP中运行Linux命令并启动SSH服务的例子

 更新时间:2014年06月12日 09:13:23   投稿:junjie  
这篇文章主要介绍了在PHP中运行Linux命令并启动SSH服务的例子,因为VPS的SSH服务挂了,导致无法进入服务器,所以想了这么一个办法,需要的朋友可以参考下

升级 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' 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);
  }
?>

相关文章

  • 为你的 Laravel 验证器加上多验证场景的实现

    为你的 Laravel 验证器加上多验证场景的实现

    这篇文章主要介绍了为你的 Laravel 验证器加上多验证场景的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 使用Rancher在K8S上部署高性能PHP应用程序的教程

    使用Rancher在K8S上部署高性能PHP应用程序的教程

    这篇文章主要介绍了使用Rancher在K8S上部署高性能PHP应用程序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • laravel 5 实现模板主题功能

    laravel 5 实现模板主题功能

    很多cms里都有模板主题功能,我们可以通过一个配置切换主题,这个功能在laravel下如何实现呢?今天我们就来探讨下这个问题。
    2015-03-03
  • laravel使用redis队列实例讲解

    laravel使用redis队列实例讲解

    这篇文章主要介绍了laravel使用redis队列实例讲解,使用laravel框架之后配置redis还是很简单的,有感兴趣的同学可以学习下
    2021-03-03
  • PHP实现chrome表单请求数据转换为接口使用的json数据

    PHP实现chrome表单请求数据转换为接口使用的json数据

    这篇文章主要介绍了PHP实现chrome表单请求数据转换为接口使用的json数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • laravel5.6中的外键约束示例

    laravel5.6中的外键约束示例

    今天小编就为大家分享一篇laravel5.6中的外键约束示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Laravel实现构造函数自动依赖注入的方法

    Laravel实现构造函数自动依赖注入的方法

    这篇文章主要介绍了Laravel实现构造函数自动依赖注入的方法,涉及Laravel构造函数自动初始化的相关技巧,需要的朋友可以参考下
    2016-03-03
  • PHP查询网站的PR值

    PHP查询网站的PR值

    PR值是google衡量网站的重要标准之一,今天就给大家一个用PHP查询网站的PR值的方法。
    2013-10-10
  • 基于php缓存的详解

    基于php缓存的详解

    本篇文章是对php中的缓存进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Thinkphp5.0 框架视图view的比较标签用法分析

    Thinkphp5.0 框架视图view的比较标签用法分析

    这篇文章主要介绍了Thinkphp5.0 框架视图view的比较标签用法,结合实例形式分析了thinkPHP5框架eq、equal、neq、notequal、egt及switch、range、between等标签相关用法,需要的朋友可以参考下
    2019-10-10

最新评论