yaroslam/ssh2

v0.1.0 2024-04-17 19:05 UTC

This package is auto-updated.

Last update: 2024-09-17 20:02:28 UTC


README

安装

要使用此库,需要安装SSH2扩展

  1. 扩展链接:SSH2
  2. 最小PHP版本 - 8.1
  3. composer require yaroslam/ssh2

文档

连接

为了初始化到远程服务器的连接,需要创建一个ConnectionInterface实例,并通过connect方法调用它,将$connectProperties和$connection(SSH2模块ssh2_connect()函数的执行结果)传递给它。

$connectProperties实例和格式列表

  1. UserPasswordConnection ["user" => ' ', 'password' => ' ']

会话

为了创建会话,需要创建一个AbstractSession实例,将ConnectionInterface实例和$connectProperties格式为['port' => port, 'host' => 'ip', 'properties' => 对所选ConnectionInterface子类的$connectProperties格式的格式]传递给构造函数。
会话类型

  1. Session - 不保留命令执行之间的执行上下文,只能使用exec()方法
  2. ChainSession - 保留命令执行之间的执行上下文,允许使用if、for、switch case等结构构建复杂场景

在使用ChainSession之前,需要使用initChain()方法初始化它

在使用会话获取结果时,需要在最后调用apply()方法
示例:$session->exec("ls -la")->apply()

命令

命令类型

  1. Single - 单个命令,exec()的唯一代表
  2. Operator - 控制命令流量的命令,代表:if()、switch()
  3. Block - 包含其他命令的命令,代表:then()、else()、for()、case()
  4. None - 空命令,代表:所有以end为前缀的命令

命令列表

  1. exec($cmd) - 执行参数$cmd中指定的命令
  2. if($cmd, $ifStatement) - 执行参数$cmd中指定的命令,然后检查$ifStatement是否出现在命令执行的结果中,如果检查成功,则执行then分支,否则执行else分支
  3. then() - 存储命令列表的命令,在if命令条件检查成功时执行
  4. else() - 与then命令相反的命令
  5. endIf() - 表示if()命令结束的命令
  6. endThen() - 表示then命令结束的命令
  7. for($start, $stop, $step) - 执行其体内的所有命令,直到内部计数器(初始值为$start)的值加上$step不大于或等于$stop
  8. endFor() - 表示for()命令结束的命令
  9. switch($cmd) - 多分支命令,执行参数$cmd中指定的命令,然后检查每个内部的case()命令是否与命令输出的条件匹配,然后执行第一个匹配的case()命令
  10. case($statement) - 执行其内部的命令,如果switch()命令在其输出的文本中找到与$statement参数匹配的语句
  11. endSwitch() - 表示switch()命令结束的命令
  12. 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。在测试中没有指定连接到服务器的数据,需要自行指定。

许可证

没有许可证,可以随意使用。