divineomega / php-ssh-connection
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
Requires
- php: >=7.2
- phpseclib/phpseclib: ^2.0
Requires (Dev)
- phpunit/phpunit: ^6.5 || ^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5
Replaces
- divineomega/php-ssh-connection: v4.0.0
README
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=1SSH_TEST_HOSTSSH_TEST_PORTSSH_TEST_USERSSH_TEST_PRIVATE_KEY_PATHorSSH_TEST_PRIVATE_KEY_CONTENTSSSH_TEST_PASSWORD(only required for password-auth test)
Then run:
vendor/bin/phpunit