Conectarse a SFTP desde PHP con SSH2

Una tarea bastante habitual desde PHP es conectarse a un FTP para lo cual PHP tiene diferentes funciones pero que sin embargo si se trata de SFTP seguramente haya que habilitar la librería libssh2 que no viene instalada por defecto.

Si para la instalación de PHP se utilizan el tutorial Instalación del Stack Nginx+MySQL+MutiPHP en CentOS o  Crear contenedor Docker con CentOS7/Nginx/MariaDB y MultiPHP se puede continuar sin problemas, de lo contrario convendrá solo se instalen los paquetes que se necesiten.

Lo primero va a ser instalar las siguientes librerías, sino no se tiene instalada alguna de las versiones de PHP que figuran a continuación se deben omitir dichos paquetes.

yum install -y libssh2-devel php54-php-pecl-ssh2 php55-php-pecl-ssh2 php56-php-pecl-ssh2 php70-php-pecl-ssh2 php71-php-pecl-ssh2 php72-php-pecl-ssh2 php73-php-pecl-ssh2

A continuación se debe agregar la extensión a los php.ini en este caso, estos pasos a continuación pertenecen a los repositorios de remi y a la instalación de los artículos que ya se mencionaron antes asi que la ubicación de php.ini puede cambiar según lo que tengan instalado

echo "extension=ssh2.so" >> /opt/remi/php54/root/etc/php.ini
echo "extension=ssh2.so" >> /opt/remi/php55/root/etc/php.ini
echo "extension=ssh2.so" >> /opt/remi/php56/root/etc/php.ini
echo "extension=ssh2.so" >> /opt/remi/php56/root/etc/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php70/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php71/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php72/php.ini
echo "extension=ssh2.so" >> /etc/opt/remi/php73/php.ini

Por último se reinician los servicios PHP-FPM

systemctl restart php54-php-fpm
systemctl restart php55-php-fpm
systemctl restart php56-php-fpm
systemctl restart php70-php-fpm
systemctl restart php71-php-fpm
systemctl restart php72-php-fpm
systemctl restart php73-php-fpm

Para probar si funciona correctamente se puede utilizar el siguiente código PHP obviamente cambiando los datos de acceso, sino se tiene muy claro cual es el $path exacto se puede colocar simplemente /./ ( es decir barra/punto/barra)

<?php

$host = "tudominio.com";
$port = "22";
$user = "tuusuario";
$password = "tupasword";
$path = "/home/tuusuario/";

$connection = ssh2_connect($host,$port) or die ("Can't connect to FTP Server : $FTPserver");
ssh2_auth_password($connection, $user , $password);

$sftp = ssh2_sftp($connection);

$dir = opendir("ssh2.sftp://$sftp$path");

while (false !== ($file = readdir($dir))) {
echo "$file<br>\n";
}
?>

Con el ejemplo básico anterior podemos probar que haya quedado todo instalado, si te da un error seguramente falta algún paquete desde yum o falta agregar al php.ini correcto ya que en el sistema podemos tener más de uno, es algo a tener en cuenta. Si tienes cualquier duda puedes dejar la consulta en el comentario.

Alvaro DeLeon

Acerca de Alvaro DeLeon

Administrador de Sistemas,Programador,Docente y Blogger. Más de 20 años de experiencia en computación. Escribo más que nada sobre Linux, sistemas operativos, virtualización, seguridad y tecnología en general además de algunos artículos con opiniones muy personales e irrelevantes.
Esta entrada fue publicada en Desarrollo, Docker y etiquetada , , , , . Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *