You can execute an SSH command like this:
Ssh::create('user', 'host')->execute('your favorite command');
It will return an instance of Symfony's Process
.
You can install the package via composer:
composer require spatie/ssh
You can execute an SSH command like this:
$process = Ssh::create('user', 'example.com')->execute('your favorite command');
It will return an instance of Symfony's Process
.
If you don't want to wait until the execute commands complete, you can call executeAsync
$process = Ssh::create('user', 'example.com')->executeAsync('your favorite command');
To check if your command ran ok
$process->isSuccessful();
This is how you can get the output
$process->getOutput();
To run multiple commands pass an array to the execute method.
$process = Ssh::create('user', 'example.com')->execute([
'first command',
'second command',
]);
You can choose a port by passing it to the constructor.
$port = 123;
Ssh::create('user', 'host', $port);
Alternatively you can use the usePort
function:
Ssh::create('user', 'host')->usePort($port);
You can set a timeout for the command.
Ssh::create('user', 'host')->setTimeout(100);
If using a jump/proxy/bastion host, the useJumpHost
function allows you to set the jump hosts details:
Ssh::create('user', 'host')->useJumpHost("$jumpuser@$jumphost:$jumpport");
If making many connections to the same host, SSH multiplexing enables re-using one TCP connection. Call useMultiplexing
function to set control master options:
Ssh::create('user', 'host')->useMultiplexing($controlPath, $controlPersist);
// Ssh::create('user', 'host')->useMultiplexing('/home/.ssh/control_masters/%C', '15m');
You can use usePrivateKey
to specify a path to a private SSH key to use.
Ssh::create('user', 'host')->usePrivateKey('/home/user/.ssh/id_rsa');
By default, strict host key checking is enabled. You can disable strict host key checking using disableStrictHostKeyChecking
.
Ssh::create('user', 'host')->disableStrictHostKeyChecking();
By default, the quiet mode is disabled. You can enable quiet mode using enableQuietMode
.
Ssh::create('user', 'host')->enableQuietMode();
By default, the password authentication is enabled. You can disable password authentication using disablePasswordAuthentication
.
Ssh::create('user', 'host')->disablePasswordAuthentication();
You can upload files & directories to a host using:
Ssh::create('user', 'host')->upload('path/to/local/file', 'path/to/host/file');
Or download them:
Ssh::create('user', 'host')->download('path/to/host/file', 'path/to/local/file');
Under the hood the process will use scp
.
Behind the scenes all commands will be performed using Symfonys Process
.
You can configure to the Process
by using the configureProcess
method. Here's an example where we disable the timeout.
Ssh::create('user', 'host')->configureProcess(fn (Process $process) => $process->setTimeout(null));
You can get notified whenever your command produces output by passing a closure to onOutput
.
Ssh::create('user', 'host')->onOutput(function($type, $line) {echo $line;})->execute('whoami');
Whenever there is output that closure will get called with two parameters:
type
: this can beSymfony\Component\Process\Process::OUT
for regular output andSymfony\Component\Process\Process::ERR
for error outputline
: the output itself
If your target is a Windows machine, you can use the removeBash
method to remove the bash command from the command line.
Ssh::create('user', 'host')->removeBash();
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
If you've found a bug regarding security please mail security@rocketeers.app instead of using the issue tracker.
If you need some more features, take a look at DivineOmega/php-ssh-connection.
The Ssh
class contains code taken from laravel/envoy
The MIT License (MIT). Please see License File for more information.