yaroslam / ssh2
Requires
- php: ^8.1
- ext-ssh2: *
Requires (Dev)
- laravel/pint: ^1.13
- phpunit/phpunit: ^10.4
This package is auto-updated.
Last update: 2024-09-17 20:02:28 UTC
README
安装
要使用此库,需要安装SSH2扩展
- 扩展链接:SSH2
- 最小PHP版本 - 8.1
composer require yaroslam/ssh2
文档
连接
为了初始化到远程服务器的连接,需要创建一个ConnectionInterface实例,并通过connect方法调用它,将$connectProperties和$connection(SSH2模块ssh2_connect()函数的执行结果)传递给它。
$connectProperties实例和格式列表
- UserPasswordConnection ["user" => ' ', 'password' => ' ']
会话
为了创建会话,需要创建一个AbstractSession实例,将ConnectionInterface实例和$connectProperties格式为['port' => port, 'host' => 'ip', 'properties' => 对所选ConnectionInterface子类的$connectProperties格式的格式]传递给构造函数。
会话类型
- Session - 不保留命令执行之间的执行上下文,只能使用exec()方法
- ChainSession - 保留命令执行之间的执行上下文,允许使用if、for、switch case等结构构建复杂场景
在使用ChainSession之前,需要使用initChain()方法初始化它
在使用会话获取结果时,需要在最后调用apply()方法
示例:$session->exec("ls -la")->apply()
命令
命令类型
- Single - 单个命令,exec()的唯一代表
- Operator - 控制命令流量的命令,代表:if()、switch()
- Block - 包含其他命令的命令,代表:then()、else()、for()、case()
- None - 空命令,代表:所有以end为前缀的命令
命令列表
- exec($cmd) - 执行参数$cmd中指定的命令
- if($cmd, $ifStatement) - 执行参数$cmd中指定的命令,然后检查$ifStatement是否出现在命令执行的结果中,如果检查成功,则执行then分支,否则执行else分支
- then() - 存储命令列表的命令,在if命令条件检查成功时执行
- else() - 与then命令相反的命令
- endIf() - 表示if()命令结束的命令
- endThen() - 表示then命令结束的命令
- for($start, $stop, $step) - 执行其体内的所有命令,直到内部计数器(初始值为$start)的值加上$step不大于或等于$stop
- endFor() - 表示for()命令结束的命令
- switch($cmd) - 多分支命令,执行参数$cmd中指定的命令,然后检查每个内部的case()命令是否与命令输出的条件匹配,然后执行第一个匹配的case()命令
- case($statement) - 执行其内部的命令,如果switch()命令在其输出的文本中找到与$statement参数匹配的语句
- endSwitch() - 表示switch()命令结束的命令
- endCase() - 表示case()命令结束的命令
命令使用示例
$chainSession->initChain()->switch('echo lol')->case('lal')->exec('echo lalka')->endCase()->case('lol')->exec('echo lolka')->endCase()->endSwitch()->for(1; 10; 1)->exec('cd ..')->endFor()->if('ls -la', '.ssh')->then()->exec('cd .ssh')->endThen()->else()->exec('echo dont find')->endElse()->endIf()->apply();
函数
ChainSession 支持在单个实例中创建函数。为此,需要调用方法 declareFunction($name),其中 $name 是函数的名称。描述函数中使用的命令,并使用方法 endFunction() 完成函数。调用函数时,需要使用方法 useFunction($name),其中 $name 是要使用的函数的名称。函数可以在调用命令之间使用。
关于命令的说明
命令 if() 和 case() 使用 preg_match() 函数检查输出中的匹配,传递的条件将用作正则表达式。
所有 end 命令的类型都是 None,并且没有绑定到起始命令。检查命令链的正确性目前无法匹配命令的开始和结束,而是依据命令之间的类型依赖规则,这意味着使用哪个结束命令将由用户负责。
测试
测试使用 PHPUnit。在测试中没有指定连接到服务器的数据,需要自行指定。
许可证
没有许可证,可以随意使用。