# ssh
**Repository Path**: jf_linux/ssh
## Basic Information
- **Project Name**: ssh
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-03-23
- **Last Updated**: 2023-03-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[
](https://supportukrainenow.org)
# A lightweight package to execute commands over an SSH connection
[](https://packagist.org/packages/spatie/ssh)
[](https://github.com/spatie/ssh/actions?query=workflow%3Arun-tests+branch%3Amaster)
[](https://packagist.org/packages/spatie/ssh)
You can execute an SSH command like this:
```php
Ssh::create('user', 'host')->execute('your favorite command');
```
It will return an instance of [Symfony's `Process`](https://symfony.com/doc/current/components/process.html).
## Support us
[
](https://spatie.be/github-ad-click/ssh)
We invest a lot of resources into creating [best in class open source packages](https://spatie.be/open-source). You can support us by [buying one of our paid products](https://spatie.be/open-source/support-us).
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on [our contact page](https://spatie.be/about-us). We publish all received postcards on [our virtual postcard wall](https://spatie.be/open-source/postcards).
## Installation
You can install the package via composer:
```bash
composer require spatie/ssh
```
## Usage
You can execute an SSH command like this:
```php
$process = Ssh::create('user', 'example.com')->execute('your favorite command');
```
It will return an instance of [Symfony's `Process`](https://symfony.com/doc/current/components/process.html).
If you don't want to wait until the execute commands complete, you can call `executeAsync`
```php
$process = Ssh::create('user', 'example.com')->executeAsync('your favorite command');
```
### Getting the result of a command
To check if your command ran ok
```php
$process->isSuccessful();
```
This is how you can get the output
```php
$process->getOutput();
```
### Running multiple commands
To run multiple commands pass an array to the execute method.
```php
$process = Ssh::create('user', 'example.com')->execute([
'first command',
'second command',
]);
```
### Choosing a port
You can choose a port by passing it to the constructor.
```php
$port = 123;
Ssh::create('user', 'host', $port);
```
Alternatively you can use the `usePort` function:
```php
Ssh::create('user', 'host')->usePort($port);
```
### Specifying a jump host
If using a jump/proxy/bastion host, the `useJumpHost` function allows you to set the jump hosts details:
```php
Ssh::create('user', 'host')->useJumpHost("$jumpuser@$jumphost:$jumpport");
```
### Using SSH multiplexing
If making many connections to the same host, SSH multiplexing enables re-using one TCP connection. Call `useMultiplexing` function to set control master options:
```php
Ssh::create('user', 'host')->useMultiplexing($controlPath, $controlPersist);
// Ssh::create('user', 'host')->useMultiplexing('/home/.ssh/control_masters/%C', '15m');
```
### Specifying the private key to use
You can use `usePrivateKey` to specify a path to a private SSH key to use.
```php
Ssh::create('user', 'host')->usePrivateKey('/home/user/.ssh/id_rsa');
```
### Disable Strict host key checking
By default, strict host key checking is enabled. You can disable strict host key checking using `disableStrictHostKeyChecking`.
```php
Ssh::create('user', 'host')->disableStrictHostKeyChecking();
```
### Enable quiet mode
By default, the quiet mode is disabled. You can enable quiet mode using `enableQuietMode`.
```php
Ssh::create('user', 'host')->enableQuietMode();
```
### Disable Password Authentication
By default, the password authentication is enabled. You can disable password authentication using `disablePasswordAuthentication`.
```php
Ssh::create('user', 'host')->disablePasswordAuthentication();
```
### Uploading & downloading files and directories
You can upload files & directories to a host using:
```php
Ssh::create('user', 'host')->upload('path/to/local/file', 'path/to/host/file');
```
Or download them:
```php
Ssh::create('user', 'host')->download('path/to/host/file', 'path/to/local/file');
```
Under the hood the process will use `scp`.
### Modifying the Symfony process
Behind the scenes all commands will be performed using [Symfonys `Process`](https://symfony.com/doc/current/components/process.html).
You can configure to the `Process` by using the `configureProcess` method. Here's an example where we disable the timeout.
```php
Ssh::create('user', 'host')->configureProcess(fn (Process $process) => $process->setTimeout(null));
```
### Immediately responding to output
You can get notified whenever your command produces output by passing a closure to `onOutput`.
```php
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 be `Symfony\Component\Process\Process::OUT` for regular output and `Symfony\Component\Process\Process::ERR` for error output
- `line`: the output itself
## Testing
``` bash
composer test
```
## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Contributing
Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details.
## Security
If you've found a bug regarding security please mail [security@spatie.be](mailto:security@spatie.be) instead of using the issue tracker.
## Alternatives
If you need some more features, take a look at [DivineOmega/php-ssh-connection](https://github.com/DivineOmega/php-ssh-connection).
## Credits
- [Freek Van der Herten](https://github.com/freekmurze)
- [All Contributors](../../contributors)
The `Ssh` class contains code taken from [laravel/envoy](https://laravel.com/docs/6.x/envoy)
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.