
Creando conexiones SSH con PHP
Tabla de contenido
Acceso Rápido
Las conexiones SSH son muy populares cuando se tienen VPS (Virtual Private Servers), todas las instalaciones y configuraciones de nuestros servidores se pueden realizar directamente desde la terminal con una conexión root.
Con PHP podemos realizar conexiones SSH a estos servidores y ejecutar comandos desde nuestra aplicación local o desde otro servidor, o podemos programar Cron Jobs para que ejecute una limpieza o descargue los respaldos del VPS a nuestra maquina.
Instalar libssh2-php
Instalaremos soporte de SSH para PHP en Ubuntu 12.04 en adelante.
[prism:php]sudo apt-get install libssh2-1-dev libssh2-php[/prism:php]
Para verificar que está correctamente instalado:
[prism:php]php m |grep php[/prism:php]
Si todo está correcto, debe retornar: ssh2
Nuestra primera conexión
Lo primero que debemos hacer es verificar que la conexión con ssh es posible desde php:
[prism:php]<?php if (!function_exists('ssh2_connect')) { die('No existe la funcion ssh2_connect.'); }[/prism:php]
Si la función existe, pasamos a verificar que pueda existir una conexión SSH al servidor:
[prism:php]<?php if (!($connection = ssh2_connect('mivps.server.com', 22))) { die('No se puede conectar con el servidor VPS.'); }[/prism:php]
Para este ejemplo, crearemos la conexión mediante usuario y clave, recordemos que de esta forma podríamos tener información sensitiva disponible dentro de nuestro código y eso es considerado un problema de seguridad:
[prism:php]<?php if (!ssh2_auth_password($connection, 'root', 'mypassword')) { die('No se puede autenticar con el usuario y clave suministrados.'); }[/prism:php]
Nuestro primer comando
Si la conexión es exitosa y ya estamos dentro de nuestro VPS, podemos ejecutar nuestro primer comando:
[prism:php]<?php if (!($exec = ssh_exec($connection, 'ls -l'))) { die('No se pudo ejecutar el comando.'); }[/prism:php]
Si todo está correcto, nuestro primer comando ya corrió en el servidor, pero, ¿Cómo sabemos que realmente funcionó?
Para ello, vamos primero a ver cómo podemos mostrar los mensajes de la consola del VPS en PHP:
[prism:php]<?php if (!($exec = ssh_exec($connection, 'ls -l'))) { die('No se pudo ejecutar el comando.'); } else { stream_set_blocking($exec, true); $data = ''; while ($fread = fread($exec, 4096)) { $data .= $fread; } fclose($exec); }[/prism:php]
En el código anterior utilizamos ssh_exec para ejecutar los comandos en la terminal del VPS, pero también podemos utilizar shel_exec:
[prism:php]<?php if (!$($shell_exec = ssh2_shell($connection, 'vt102', null, 80, 24, SSH2_TERM_UNIT_CHARS))) { die('No se pudo ejecutar el comando'); }[/prism:php]
Conectando al VPS con una llave pública
Para hacer un poco más segura la conexión a nuestro VPS podemos utilizar una llave pública.
En la terminal de nuestro computador ejecutamos los siguientes comandos para crear un par de llaves (privada/publica): [prism:php]cd ~/.ssh ssh-keygen[/prism:php]
Dejamos todos los valores por defecto Una vez creadas nuestras llaves, agregamos un array como tercer parámetro a la conexión y sustituimos el comando ssh2_auth_password por el siguiente:
[prism:php]<?php $connection = ssh2_connect('mivps.server.com', 22, array('hostkey' => 'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root', 'home/nombredeusuario/.ssh/id_rsa.pub', 'home/nombredeusuario/.ssh/id_rsa')) { die('No se pudo realizar la conexión con el servidor.') }[/prism:php] Con esto ya podemos ejecutar conexiones a nuestro VPS con llaves SSH desde PHP.
Conclusión
Podemos programar y ejecutar muchos comandos por medio de conexiones SSH para hacer mantenimiento a uno o más servidores desde una aplicación PHP ubicada en nuestro servidor local u otro VPS.
Extra: Librerías de conexión SSH
Con estos comandos podemos crear conexiones SSH directamente desde nuestro PHP, pero ya existen algunas librerías que aseguran o mejoran este tipo de conexiones:
- phpseclib: Una librería creada en puro PHP que no requiere de librerías adicionales para crear conexiones SSH.
- Net_SSH2: El conector de PEAR.
Te recomendamos en video
Blogs relacionados

OWASP Top 10 for LLM y Promptfoo

Soluciones IA para banca con arquitectura MCP en entornos de banca digital

Casos de uso de los protocolos de contexto de modelos en IA

Soluciones líderes de software de automatización contable

Qué es MCP en banca y por qué reemplaza al RPA tradicional
