PHPackages                             yaroslam/ssh2 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. yaroslam/ssh2

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

yaroslam/ssh2
=============

v0.1.0(2y ago)111MITPHPPHP ^8.1

Since Feb 27Pushed 1y ago1 watchersCompare

[ Source](https://github.com/Yaroslam/ssh2)[ Packagist](https://packagist.org/packages/yaroslam/ssh2)[ RSS](/packages/yaroslam-ssh2/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)Dependencies (2)Versions (4)Used By (0)

Yaroslam/SSH2
=============

[](#yaroslamssh2)

Данная библиотека предназначена для выполнения команд на удаленном сервере через протокол ssh2. Библиотека позволяет выполнять подключение к серверу, исполнять команды на сервере, создавать сложные сценарии исполнения с условными операторами, циклами, функциями.

Требования к установке
----------------------

[](#требования-к-установке)

1. установленное расширение [SSH2](https://www.php.net/manual/ru/ssh2.installation.php)
2. минимальная версия 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:

1. UserPasswordConnection \["user" =&gt; string, "password" =&gt; string\]

### Сессии

[](#сессии)

Для создания сессии необходимо создать экземпляр AbstractSession, передав в конструктор экземпляр ConnectionInterface и $connectProperties формата \['port' =&gt; port, 'host' =&gt; ip, 'properties' =&gt; формат $connectProperties для выбранного подтипа ConnectionInterface\]
Типы сессий

1. Session - не сохраняет контекст выполнения между командами и позволяет использовать только exec() метод

```
$session = new Session(new UserPasswordConnection(),
                        ['port' => 22,
                        'host' => $_ENV['host'],
                        'properties' => ['user' => $_ENV['host'], 'password' => $_ENV['host']]
                      ]);

```

2. 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();

```

### Команды

[](#команды)

#### Типы команд:

[](#типы-команд)

1. Single - одиночная команда, единственные представитель exec()
2. Operator - команды, которые управляют потоком выполнения цепочки команд представители: if(), switch()
3. Block - команды, которые внутри себя хранят другие команды представители: then(), else(), for(), case()
4. None - команды заглушки, представители - все команды с префиксом end

#### Список команд

[](#список-команд)

1. exec($cmd) - выполняет переданную в параметре $cmd команду ```
    $session->exec('ls -la');

    ```
2. if($cmd, $ifStatement) - выполняет переданную в $cmd команду и в дальнейшем проверяет вхождение $ifStatement в результате выполнения команды, если проверка завершилась успехом, будет выполнена ветка then, иначе ветка else ```
    $session->if('ls -la', 'opt')
               ->then()
                 ->exec('cd opt')
               ->endThen()
               ->else()
                 ->exec('cd ..')
               ->endElse()
             ->endIf()

    ```
3. for($start, $stop, $step) - команда выполняющая все команды внутри своего тела пока внутренний счетчик, стартовое значение которого равно значению $start, каждый шаг увеличивающийся на значение $step не станет больше или равен значению $stop
4. switch($cmd) - команда множественного ветвления, выполняет переданную в $cmd команду, после чего проверяет каждую внутреннюю case() команду на вхождение их условий в текст вывода выполненной команды, после чего выполняет первую case() команду с которой было найдено совпадение

### Функции

[](#функции)

ChainSession поддерживает создание функций в рамках одного экземпляра. Для этого необходимо вызвать метод declareFunction($name), где $name - имя функции. Описать используемые в функции команды и завершить функцию методом endFunction(). Для вызова функции необходимо использовать метод useFunction($name), где $name имя используемой функции. Функции можно использовать между вызовами команд.

#### Замечания к командам

[](#замечания-к-командам)

Команды if() и case() проверяют вхождение в вывод используя функцию preg\_match(), переданное условие будет использоваться в качестве регулярного выражения
Все end команды имеют тип None и не имеют привязки к начинающим командам, проверка правильности составления цепочки команд пока что не умеет сопоставлять начало команды с ее концом и руководствуется правилами зависимостей типов команд друг от друга, это означает что соблюдение того, какая закрывающая команда используется, остается за пользователем

Тестирование
------------

[](#тестирование)

Для тестирования используется PHPUnit. В тестах не указаны данные для подключения к серверу, их необходимо указать самостоятельно

Лицензия
========

[](#лицензия)

Лицензии нет, используйте как хотите.

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance31

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~25 days

Total

3

Last Release

760d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2d7387155db684979ea561c9d020e5588c321aca8fe4a38de8f4c3d80bfe821c?d=identicon)[Yaroslam](/maintainers/Yaroslam)

---

Top Contributors

[![CherkashinYaroslav](https://avatars.githubusercontent.com/u/159754953?v=4)](https://github.com/CherkashinYaroslav "CherkashinYaroslav (3 commits)")[![Yaroslam](https://avatars.githubusercontent.com/u/47461457?v=4)](https://github.com/Yaroslam "Yaroslam (1 commits)")

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/yaroslam-ssh2/health.svg)

```
[![Health](https://phpackages.com/badges/yaroslam-ssh2/health.svg)](https://phpackages.com/packages/yaroslam-ssh2)
```

###  Alternatives

[bkozlic/configurable-options

Magento 2 module for configurable product

182.6k](/packages/bkozlic-configurable-options)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
