kraken-php / ssh
Kraken 异步 SSH。
v0.4.1
2017-05-11 20:36 UTC
Requires
- php: >=5.6.7
- kraken-php/event: 0.4.*
- kraken-php/loop: 0.4.*
- kraken-php/stream: 0.4.*
- kraken-php/throwable: 0.4.*
- kraken-php/util: 0.4.*
Suggests
- ext-ssh2: *
This package is not auto-updated.
Last update: 2024-09-15 02:41:09 UTC
README
注意:该仓库是 Kraken 框架的一部分,但 可以自由作为独立库使用。如果您对更多 PHP 异步组件感兴趣,请查看 Kraken 项目 的其余部分或查看我们的异步应用程序骨架示例。
描述
SSH 是一个组件,为 PHP SSH2 扩展提供了统一的接口,并允许异步读写。
特性亮点
SSH 特性
- PHP SSH2 扩展的面向对象抽象
- 支持多种授权方法
- 异步 SSH2 命令
- 通过 SFTP 异步对文件进行操作
- 与 Kraken 框架兼容
- ...等等。
示例
本节包含最常询问的示例。您可以在 示例目录 或在 官方文档 中查看更多。
执行命令
$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 = [ "KRAKEN\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();
在 示例目录 或在 官方文档 中查看更多示例。
要求
- PHP-5.6 或 PHP-7.0+,
- UNIX 或 Windows 操作系统,
- 启用 PHP SSH2 扩展。
安装
composer require kraken-php/ssh
测试
测试包含在我们的只写 框架仓库 中。
文档
该模块的文档可以在 官方文档 中找到。
贡献
这个库是 Kraken 框架的只读子树分割。要做出贡献,请访问 框架仓库。
许可
本库采用 MIT 许可协议,更多信息请参见 Kraken 框架 许可证部分。