在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 MSSQL 存储过程的方法
Dec 24 PHP
PHP Pear 安装及使用
Mar 19 PHP
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
PHP实现货币换算的方法
Nov 29 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 PHP
Yii2选项卡的简单使用
May 26 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
Smarty模板类内部原理实例分析
Jul 03 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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 Error与Logging函数的深入理解
2013/06/03 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
js中onload与onunload的使用示例
2013/08/25 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
python下载图片实现方法(超简单)
2017/07/21 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
python中有帮助函数吗
2020/06/19 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
采购部经理岗位职责
2014/02/10 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
国庆横幅标语
2014/10/08 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
山楂树之恋观后感
2015/06/11 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
Python学习之迭代器详解
2022/04/01 Python