Comandos SSH en Laravel

Laravel ssh
Solucionex
01
Oct 25

Proyecto tras proyecto van surgiendo nuevas necesidades y, en algunos casos, una de ellas es la posibilidad de conectarnos remotamente a un servidor para ejecutar comandos desde nuestra aplicación Laravel.

Gracias al paquete de spatie/ssh, podernos conectarnos y lanzar comandos de manera ágil y sencilla, sin la necesidad de salir de la aplicación.

 

Instalación

Para instalar el paquete, tan solo necesitamos Composer:

composer require spatie/ssh

Una vez instalado, no es necesaria ninguna configuración adicional.

 

Uso básico del paquete

Para ejecutar un comando en un servidor solo necesitaremos las credenciales de acceso o, como mostraremos a continuación, la clave SSH privada:

use Spatie\Ssh\Ssh;
$result = Ssh::create('usuario', 'servidor.com')
   ->usePrivateKey('/home/user/.ssh/id_rsa')
   ->execute('ls -la');
dd($result);

El resultado que nos devolverá la consulta podremos procesarlo más tarde.

También podemos ejecutar varios comandos, los cuales se ejecutarán en el orden que indiquemos:

$result = Ssh::create('usuario', 'servidor.com')
   ->usePrivateKey('~/.ssh/id_rsa')
   ->execute([
       'cd /var/www/project',
       'git pull origin main',
       'php artisan migrate',
       'php artisan cache:clear'
   ]);

 

Manejando los errores

Si por algún motivo la ejecución de los comandos devuelve un error, podemos monitorear lo que está pasando gracias a los métodos isSuccessful() y getOutput()

$result = Ssh::create('usuario', 'servidor.com')
   ->usePrivateKey('~/.ssh/id_rsa')
   ->execute([
       'cd /var/www/project',
       'git pull origin main',
       'php artisan migrate',
       'php artisan cache:clear'
   ]);

if !$result->isSuccessfull {
	dd($result->getOutput())
}

 

Conclusión

Gracias a spatie/ssh podemos ahorrar muchísimo tiempo siempre un cuando necesitemos realizar conexiones ssh desde nuestra aplicación, ya sea para revisar tareas simples o para automatizar procesos.

Para más información acerca del uso del paquete, consultar la documentación oficial.

 

 

Fuentes: Documentación oficial de spatie/ssh

laravel