merlinthemagic / mtm-shells
PHP 7 的外壳工具
dev-master
2024-05-24 16:10 UTC
Requires
- php: >=7.3.0
- merlinthemagic/mtm-fs: >=0.0.1
- merlinthemagic/mtm-utilities: >=0.0.1
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);