merlinthemagic/mtm-shells

PHP 7 的外壳工具

dev-master 2024-05-24 16:10 UTC

This package is auto-updated.

Last update: 2024-09-24 17:03:50 UTC


README

这是什么?

创建和操作外壳的一种方法。您可以执行任何想要的命令,与底层外壳完全兼容。

安装

composer require merlinthemagic/mtm-shells

获取外壳

作为当前用户 Bash(例如 apache,www-data 等)

$ctrlObj		= \MTM\Shells\Factories::getShells()->getBash(false);

作为 root Bash

显然让 PHP 接近 root 是一个糟糕的主意,但这个选项是存在的。

允许 PHP 用户运行 sudo

将以下片段的最后一行添加到文件中:/etc/sudoers

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
## Add the line below, replace apache with whatever name your run your webserver with e.g. www-data
apache	ALL=(ALL)NOPASSWD:/usr/bin/python3

然后获取一个外壳,允许 MTM-Shells 使用我们给予 web 服务器用户 sudo 权限的 python3

//get a root shell via sudo
$ctrlObj		= \MTM\Shells\Factories::getShells()->getBash(true);

如果您不喜欢给 web 服务器 sudo 权限,您可以使用 SU 并提供密码

//get a root shell with password
$username		= "root";
$password		= "very_secret";

$ctrlObj		= \MTM\Shells\Factories::getShells()->getBash();
\MTM\Shells\Factories::getStencils()->getLinux()->getSu()->byPassword($ctrlObj, $username, $password);

echo $ctrlObj->getCmd("whoami")->get(); //root

执行命令

$strCmd		= "whoami";
$data		= $ctrlObj->getCmd($strCmd)->get();
echo $data; //webserver user or if you got a root shell, then root :)

$strCmd1	= "cd /var";
$ctrlObj->getCmd($strCmd1)->get(); //enter the /var directory

$strCmd2	= "ls -sho --color=none";
$data		= $ctrlObj->getCmd($strCmd2)->get();
echo $data; //directory and file listing from /var

文件和目录

SFTP 将目录递归地复制到远程服务器

注意:SFTP 不会包括源目录,只会将所有子文件和目录复制到指定的目标目录中 注意:不存在的目标目录将被创建

$ctrlObj		= \MTM\Shells\Factories::getShells()->getBash(); //can also be a ssh shell obj from MTM-SSH
$toolObj		= \MTM\Shells\Factories::getFiles()->getSftpTool();

$srcDir			= "/path/to/dir/";
$dstDir			= "/";
$ipAddr			= "192.168.1.15";
$username		= "myUserName";
$password		= "verySecret";

$toolObj->passwordCopy($ctrlObj, $srcDir, $dstDir, $ipAddr, $username, $password);

SCP 将目录递归地复制到远程服务器

注意:SCP 将包括源目录以及所有子文件和目录复制到指定的目标目录中 注意:基本目标目录必须存在,不会创建

$ctrlObj		= \MTM\Shells\Factories::getShells()->getBash(); //can also be a ssh shell obj from MTM-SSH
$toolObj		= \MTM\Shells\Factories::getFiles()->getScpTool();

$srcDir			= "/path/to/dir/";
$dstDir			= "/dst/dir/"; //must exist
$ipAddr			= "192.168.1.15";
$username		= "myUserName";
$password		= "verySecret";

$toolObj->passwordCopy($ctrlObj, $srcDir, $dstDir, $ipAddr, $username, $password);

Rsync 将目录递归地复制到远程服务器

注意:Rsync 将包括源目录以及所有子文件和目录复制到指定的目标目录中 注意:基本目标目录必须存在,不会创建

$ctrlObj		= \MTM\Shells\Factories::getShells()->getBash(); //can also be a ssh shell obj from MTM-SSH
$toolObj		= \MTM\Shells\Factories::getFiles()->getRsyncTool();

$srcDir			= "/path/to/dir/";
$dstDir			= "/dst/dir/"; //must exist
$ipAddr			= "192.168.1.15";
$username		= "myUserName";
$password		= "verySecret";

$toolObj->passwordCopy($ctrlObj, $srcDir, $dstDir, $ipAddr, $username, $password);