您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
三六零分类信息网 > 肇庆分类信息网,免费分类信息发布

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

2025/12/20 16:14:56发布39次查看
这篇文章主要介绍了在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 一致。
相关的代码片断:
复制代码 代码如下:
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);
  }
?>
肇庆分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product