dazzle-php / ssh
Dazzle 异步 SSH。
v0.5.0-alpha
2017-06-24 22:25 UTC
Requires
- php: >=5.6.7
- dazzle-php/event: 0.5.*
- dazzle-php/loop: 0.5.*
- dazzle-php/stream: 0.5.*
- dazzle-php/throwable: 0.5.*
- dazzle-php/util: 0.5.*
Requires (Dev)
- phpunit/phpunit: >=4.8.0 <5.4.0
Suggests
- ext-ssh2: *
This package is not auto-updated.
Last update: 2024-09-15 04:00:19 UTC
README
注意: 本存储库是 Dazzle 项目 的一部分,该项目是新一代的 PHP 库。项目的目的是为 PHP 开发者提供一套完整的工具来构建功能齐全的异步应用程序。请务必仔细阅读附带的 README 文件,保证您会对它的易用性和强大功能感到惊讶。同时,您还可以在我们的 Dazzle 仓库 中查看其他异步库,以获得完整的 Dazzle 体验。
描述
Dazzle SSH 是一个组件,它为 PHP SSH2 扩展提供了一致的接口,并允许异步读写。
特性亮点
Dazzle SSH 特性
- PHP SSH2 扩展的对象封装抽象
- 支持各种授权方法
- 异步 SSH2 命令
- 通过 SFTP 在文件上执行异步操作
- ...等等。
提供示例
执行命令
$loop = new Loop(new SelectLoop); $auth = new SSH2Password($user, $pass); $config = new SSH2Config(); $ssh2 = new SSH2($auth, $config, $loop); $ssh2->on('connect:shell', function(SSH2DriverInterface $shell) use($ssh2, $loop) { echo "# CONNECTED SHELL\n"; $buffer = ''; $command = $shell->open(); $command->write('ls -la'); $command->on('data', function(SSH2ResourceInterface $command, $data) use(&$buffer) { $buffer .= $data; }); $command->on('end', function(SSH2ResourceInterface $command) use(&$buffer) { echo "# COMMAND RETURNED:\n"; echo $buffer; $command->close(); }); $command->on('close', function(SSH2ResourceInterface $command) use($shell) { $shell->disconnect(); }); }); $ssh2->on('disconnect:shell', function(SSH2DriverInterface $shell) use($ssh2) { echo "# DISCONNECTED SHELL\n"; $ssh2->disconnect(); }); $ssh2->on('connect', function(SSH2Interface $ssh2) { echo "# CONNECTED\n"; $ssh2->createDriver(SSH2::DRIVER_SHELL) ->connect(); }); $ssh2->on('disconnect', function(SSH2Interface $ssh2) use($loop) { echo "# DISCONNECTED\n"; $loop->stop(); }); $loop->onTick(function() use($ssh2) { $ssh2->connect(); }); $loop->start();
写入文件
$loop = new Loop(new SelectLoop); $auth = new SSH2Password($user, $pass); $config = new SSH2Config(); $ssh2 = new SSH2($auth, $config, $loop); $ssh2->on('connect:sftp', function(SSH2DriverInterface $sftp) use($loop, $ssh2) { echo "# CONNECTED SFTP\n"; $lines = [ "DAZZLE\n", "IS\n", "AWESOME!\n" ]; $linesPointer = 0; $file = $sftp->open(__DIR__ . '/_file_write.txt', 'w+'); $file->write(); $file->on('drain', function(SSH2ResourceInterface $file) use(&$lines, &$linesPointer) { echo "# PART OF THE DATA HAS BEEN WRITTEN\n"; if ($linesPointer < count($lines)) { $file->write($lines[$linesPointer++]); } }); $file->on('finish', function(SSH2ResourceInterface $file) { echo "# FINISHED WRITING\n"; $file->close(); }); $file->on('close', function(SSH2ResourceInterface $file) use($sftp) { echo "# FILE HAS BEEN CLOSED\n"; $sftp->disconnect(); }); }); $ssh2->on('disconnect:sftp', function(SSH2DriverInterface $sftp) use($ssh2) { echo "# DISCONNECTED SFTP\n"; $ssh2->disconnect(); }); $ssh2->on('connect', function(SSH2Interface $ssh2) { echo "# CONNECTED\n"; $ssh2->createDriver(SSH2::DRIVER_SFTP) ->connect(); }); $ssh2->on('disconnect', function(SSH2Interface $ssh2) use($loop) { echo "# DISCONNECTED\n"; $loop->stop(); }); $loop->onTick(function() use($ssh2) { $ssh2->connect(); }); $loop->start();
读取文件
$loop = new Loop(new SelectLoop); $auth = new SSH2Password($user, $pass); $config = new SSH2Config(); $ssh2 = new SSH2($auth, $config, $loop); $ssh2->on('connect:sftp', function(SSH2DriverInterface $sftp) use($loop, $ssh2) { echo "# CONNECTED SFTP\n"; $buffer = ''; $file = $sftp->open(__DIR__ . '/_file_read.txt', 'r+'); $file->read(); $file->on('data', function(SSH2ResourceInterface $file, $data) use(&$buffer) { $buffer .= $data; }); $file->on('end', function(SSH2ResourceInterface $file) use(&$buffer) { echo "# FOLLOWING LINES WERE READ FROM FILE:\n"; echo $buffer; $file->close(); }); $file->on('close', function(SSH2ResourceInterface $file) use($sftp) { echo "# FILE HAS BEEN CLOSED\n"; $sftp->disconnect(); }); }); $ssh2->on('disconnect:sftp', function(SSH2DriverInterface $sftp) use($ssh2) { echo "# DISCONNECTED SFTP\n"; $ssh2->disconnect(); }); $ssh2->on('connect', function(SSH2Interface $ssh2) { echo "# CONNECTED\n"; $ssh2->createDriver(SSH2::DRIVER_SFTP) ->connect(); }); $ssh2->on('disconnect', function(SSH2Interface $ssh2) use($loop) { echo "# DISCONNECTED\n"; $loop->stop(); }); $loop->onTick(function() use($ssh2) { $ssh2->connect(); }); $loop->start();
更多示例请参阅 示例目录。
要求
Dazzle SSH 需要
- PHP-5.6 或 PHP-7.0+,
- UNIX 或 Windows 操作系统,
- 启用 PHP SSH2 扩展。
安装
要安装此库,请确保已安装 composer,然后运行以下命令
$> composer require dazzle-php/ssh
测试
可以通过以下方式运行测试
$> vendor/bin/phpunit -d memory_limit=1024M
版本控制
Dazzle 库的版本控制正在 Dazzle 项目 中共享。这意味着所有包的发布都是同时进行的。一方面,这可能导致某些包有时出现“空”发布,但请放心。最终,对贡献者来说维护起来更容易,更重要的是,对用户来说,理解包的兼容性和互操作性更为直观。
贡献
感谢您考虑为这个存储库做出贡献!
- 贡献指南可以在 贡献提示 中找到。
- 开放票据可以在 问题部分 找到。
- 当前贡献者列在 图表部分
- 要联系作者,请参阅 composer.json 文件中附带的信息。
许可证
Dazzle SSH 是开源软件,采用 MIT 许可证。
"一切皆有可能。不可能只是需要更长的时间。” —— 丹·布朗