yaroslam / ssh2
Installs: 11
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/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: 2025-12-19 20:03:05 UTC
README
Данная библиотека предназначена для выполнения команд на удаленном сервере через протокол ssh2. Библиотека позволяет выполнять подключение к серверу, исполнять команды на сервере, создавать сложные сценарии исполнения с условными операторами, циклами, функциями.
Требования к установке
- установленное расширение SSH2
- минимальная версия PHP - 8.4
Установка
composer require yaroslam/ssh2
Документация
Подключение
Что бы инициализировать подключение к удаленному серверу необходимо создать экземпляр ConnectionInterface и обратиться к методу connect, передав в него $connectProperties и $connection, являющийся результатом выполнения функции ssh2_connect() модуля SSH2.
$connector = new UserPasswordConnection();
$connector->connect(ssh2_connect($_ENV['host'], 22), ['user' => $_ENV['host'], 'password' =>$_ENV['host']])
Список экземпляров и формата $connectProperties:
- UserPasswordConnection ["user" => string, "password" => string]
Сессии
Для создания сессии необходимо создать экземпляр AbstractSession, передав в конструктор экземпляр ConnectionInterface и $connectProperties
формата ['port' => port, 'host' => ip,
'properties' => формат $connectProperties для выбранного подтипа ConnectionInterface]
Типы сессий
- Session - не сохраняет контекст выполнения между командами и позволяет использовать только exec() метод
$session = new Session(new UserPasswordConnection(),
['port' => 22,
'host' => $_ENV['host'],
'properties' => ['user' => $_ENV['host'], 'password' => $_ENV['host']]
]);
- ChainSession - сохраняет контекст выполнения между командами и позволяет конструировать сложные сценарии с использованием if, for, switch case конструкций
$chainSession = new ChainSession(new UserPasswordConnection(),
['port' => 22,
'host' => $_ENV['host'],
'properties' => ['user' => $_ENV['host'], 'password' => $_ENV['host']]
]);
ChainSession необходимо инициализировать методом initChain() перед началом использования команд
$chainSession->initChain();
При использовании любой сессии для получения результата необходимо в конце вызвать метод apply()
$session->exec("ls -la")->apply();
$chainSession->initChain()->exec('ls -la')->apply();
Команды
Типы команд:
- Single - одиночная команда, единственные представитель exec()
- Operator - команды, которые управляют потоком выполнения цепочки команд представители: if(), switch()
- Block - команды, которые внутри себя хранят другие команды представители: then(), else(), for(), case()
- None - команды заглушки, представители - все команды с префиксом end
Список команд
- exec($cmd) - выполняет переданную в параметре $cmd команду
$session->exec('ls -la'); - if($cmd, $ifStatement) - выполняет переданную в $cmd команду и в дальнейшем проверяет вхождение
$ifStatement в результате выполнения команды, если проверка завершилась успехом, будет выполнена ветка then,
иначе ветка else
$session->if('ls -la', 'opt') ->then() ->exec('cd opt') ->endThen() ->else() ->exec('cd ..') ->endElse() ->endIf() - for($start, $stop, $step) - команда выполняющая все команды внутри своего тела пока внутренний счетчик, стартовое значение которого равно значению $start, каждый шаг увеличивающийся на значение $step не станет больше или равен значению $stop
- switch($cmd) - команда множественного ветвления, выполняет переданную в $cmd команду, после чего проверяет каждую внутреннюю case() команду на вхождение их условий в текст вывода выполненной команды, после чего выполняет первую case() команду с которой было найдено совпадение
Функции
ChainSession поддерживает создание функций в рамках одного экземпляра. Для этого необходимо вызвать метод declareFunction($name), где $name - имя функции. Описать используемые в функции команды и завершить функцию методом endFunction(). Для вызова функции необходимо использовать метод useFunction($name), где $name имя используемой функции. Функции можно использовать между вызовами команд.
Замечания к командам
Команды if() и case() проверяют вхождение в вывод используя функцию preg_match(), переданное
условие будет использоваться в качестве регулярного выражения
Все end команды имеют тип None и не имеют привязки к начинающим командам, проверка
правильности составления цепочки команд пока что не умеет сопоставлять начало команды с ее концом
и руководствуется правилами зависимостей типов команд друг от друга, это означает
что соблюдение того, какая закрывающая команда используется, остается за пользователем
Тестирование
Для тестирования используется PHPUnit. В тестах не указаны данные для подключения к серверу, их необходимо указать самостоятельно
Лицензия
Лицензии нет, используйте как хотите.