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


Posted in PHP onJune 12, 2014

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

PHP 相关文章推荐
PHP 和 MySQL 基础教程(二)
Oct 09 PHP
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
php fread读取文件注意事项
Sep 24 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP小教程之实现双向链表
Jun 12 #PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 #PHP
PHP命名空间(Namespace)简明教程
Jun 11 #PHP
PHP APC配置文件2套和参数详解
Jun 11 #PHP
PHP捕获Fatal error错误的方法
Jun 11 #PHP
PHP独立Session数据库存储操作类分享
Jun 11 #PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 #PHP
You might like
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
python实现爬虫下载漫画示例
2014/02/16 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
类的核心特性有哪些
2014/01/01 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
小学运动会表扬稿
2014/01/19 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
消防安全员岗位职责
2014/03/10 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
2016年七夕情人节宣传语
2015/11/25 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏