prsw/ssh-client

Async SSH client for PHP using amphp v3 fibers. Supports password and public key auth, command execution with streaming output, and interactive shell.

Maintainers

Package info

github.com/praswicaksono/ssh-client

pkg:composer/prsw/ssh-client

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-05-09 13:19 UTC

This package is auto-updated.

Last update: 2026-05-09 13:26:43 UTC


README

Async SSH client for PHP, built on amphp v3 fibers.

No libssh2 dependency. Pure PHP — uses ext-openssl, ext-sodium, and ext-gmp for crypto.

Install

composer require prsw/ssh-client

Quick Start

Execute a command

\Amp\async(function (): void {
    $client = \PRSW\Ssh\Client\SshClient::connect(
        'host:22',
        new \PRSW\Ssh\Client\Authentication\PasswordAuthentication('user', 'password'),
    );

    $exec = $client->exec('ls -la');
    \Amp\ByteStream\pipe($exec->getStdout(), \Amp\ByteStream\getStdout());
    $exitCode = $exec->wait();
})->await();

Interactive shell

\Amp\async(function (): void {
    $client = \PRSW\Ssh\Client\SshClient::connect(
        'host:22',
        new \PRSW\Ssh\Client\Authentication\PasswordAuthentication('user', 'password'),
    );

    $shell = $client->shell();
    \Amp\ByteStream\pipe(\Amp\ByteStream\getStdin(),  $shell->getStdin());
    \Amp\ByteStream\pipe($shell->getStdout(), \Amp\ByteStream\getStdout());
    \Amp\ByteStream\pipe($shell->getStderr(), \Amp\ByteStream\getStderr());
    $shell->wait();
})->await();

Public key auth

$auth = new \PRSW\Ssh\Client\Authentication\PublicKeyAuthentication(
    'user',
    privateKey: '/home/user/.ssh/id_ed25519',
);

\Amp\async(function () use ($auth): void {
    $client = \PRSW\Ssh\Client\SshClient::connect('host:22', $auth);
    $exec = $client->exec('whoami');
    \Amp\ByteStream\pipe($exec->getStdout(), \Amp\ByteStream\getStdout());
    $exec->wait();
})->await();

Requirements

  • PHP 8.4+
  • ext-openssl, ext-sodium, ext-gmp, ext-hash

License

MIT