divineomega/php-ssh-connection

This package is abandoned and no longer maintained. The author suggests using the jord-jd/php-ssh-connection package instead.

Provides an elegant syntax to connect to SSH servers and execute commands.

Fund package maintenance!
DivineOmega

Installs: 107 315

Dependents: 2

Suggesters: 0

Security: 0

Stars: 112

Watchers: 0

Forks: 21

Open Issues: 0

pkg:composer/divineomega/php-ssh-connection

v4.0.0 2026-02-16 03:31 UTC

This package is auto-updated.

Last update: 2026-02-16 03:34:02 UTC


README

Tests

The PHP SSH Connection package provides an elegant syntax to connect to SSH servers and execute commands. It supports password and public-private key authentication, and can capture command output and errors.

Supported runtimes: PHP 7.2+ and PHP 8.x.

Installation

Install with Composer:

composer require jord-jd/php-ssh-connection

Usage

$connection = (new SSHConnection())
            ->to('test.rebex.net')
            ->onPort(22)
            ->as('demo')
            ->withPassword('password')
         // ->withPrivateKey($privateKeyPath)
         // ->withPrivateKeyString($privateKeyContents)
         // ->timeout(30)
            ->connect();

$command = $connection->run('echo "Hello world!"');

$command->getOutput();  // 'Hello world!'
$command->getError();   // ''

$connection->upload($localPath, $remotePath);
$connection->download($remotePath, $localPath); // supports recursive directory downloads

Running multiple commands

Each run() call executes in a fresh shell context. If you need stateful command execution (for example cd then touch), use runCommands():

$connection->runCommands([
    'cd /var/www/html',
    'mkdir -p app',
    'cd app',
    'touch index.php',
]);

Fingerprint verification

For security, you can fingerprint the remote server and verify it remains the same across connections.

$fingerprint = $connection->fingerprint(); // defaults to MD5 for backward compatibility

if ($newConnection->fingerprint() !== $fingerprint) {
    throw new Exception('Fingerprint does not match!');
}

Available fingerprint types:

$md5Fingerprint    = $connection->fingerprint(SSHConnection::FINGERPRINT_MD5);
$sha1Fingerprint   = $connection->fingerprint(SSHConnection::FINGERPRINT_SHA1);
$sha256Fingerprint = $connection->fingerprint(SSHConnection::FINGERPRINT_SHA256);
$sha512Fingerprint = $connection->fingerprint(SSHConnection::FINGERPRINT_SHA512);

Testing

The package test suite includes SSH integration tests. Set these variables before running tests:

  • RUN_SSH_INTEGRATION_TESTS=1
  • SSH_TEST_HOST
  • SSH_TEST_PORT
  • SSH_TEST_USER
  • SSH_TEST_PRIVATE_KEY_PATH or SSH_TEST_PRIVATE_KEY_CONTENTS
  • SSH_TEST_PASSWORD (only required for password-auth test)

Then run:

vendor/bin/phpunit