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

2015-01-24信息快讯网

这篇文章主要介绍了在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);
  } 
?>

PHP自动重命名文件实现方法
php以post形式发送xml的方法
PHP中Header使用的HTTP协议及常用方法小结
phpmyadmin中禁止外网使用的方法
PHP中ini_set与ini_get用法实例
php验证session无效的解决方法
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
CI框架Session.php源码分析
完美实现wordpress禁止文章修订和自动保存的方法
自编函数解决pathinfo()函数处理中文问题
ThinkPHP实现二级循环读取的方法
PHP中使用addslashes函数转义的安全性原理分析
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Linux下安装PHP MSSQL扩展教程
教你如何开启shopnc b2b2c 伪静态
php中__destruct与register_shutdown_function执行的先后顺序问题
安装ImageMagick出现error while loading shared libraries的解决方法
探寻PHP脚本不报错的原因
PHP小教程之实现双向链表
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
PHP命名空间(Namespace)简明教程
PHP APC配置文件2套和参数详解
PHP捕获Fatal error错误的方法
PHP独立Session数据库存储操作类分享
php调用nginx的mod_zip模块打包ZIP文件
一个严格的PHP Session会话超时时间设置方法
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
PHP、Nginx、Apache中禁止网页被iframe引用的方法
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
PHP is_subclass_of函数的一个BUG和解决方法
php中$美元符号与Zen Coding冲突问题解决方法分享
ECMall支持SSL连接邮件服务器的配置方法详解
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
PHP函数addslashes和mysql_real_escape_string的区别
用PHP和Shell写Hadoop的MapReduce程序
©2014-2024 dbsqp.com