scp et SSH en PHP
Hop,
J’ai eu besoin de faire un script un peu évolué pour jouer avec une base Oracle et des fichiers à ramener depuis un serveur distant.
Bref, j’ai pensé au PHP pour faire un truc assez fin, mêlant Oracle et des transferts de fichiers en « scp ».
Seule difficulté, installer le module SSH pour PHP. Ce que je décris ici.
Ensuite, les bouts de codes exemple sont sur la doc de PHP.
Côté serveur Debian
J’étais parti de l’installation PECL directement, ça plante, il manquait des petits bouts côté Debian. Je montre pour l’exemple :
srv:~# pecl install ssh2 "channel://pecl.php.net/ssh2-0.11.2" Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.11.2, stability "beta", use "channel://pecl.php.net/ssh2-0.11.2" to install downloading ssh2-0.11.2.tgz ... Starting to download ssh2-0.11.2.tgz (22,740 bytes) ........done: 22,740 bytes [...] checking for ssh2 files in default path... not found configure: error: The required libssh2 library was not found. You can obtain that package from http://sourceforge.net/projects/libssh2/ ERROR: `/tmp/pear/temp/ssh2/configure --with-ssh2' failed
Donc, il faut d’abord installer tout ça :
srv:~# apt-cache search libssh2 libnet-ssh2-perl - Perl module for the SSH 2 protocol libssh2-1-dbg - SSH2 client-side library (debug package) libssh2-1-dev - SSH2 client-side library (development headers) libssh2-1 - SSH2 client-side library libssh2-php - PHP Bindings for libssh2 python-libssh2 - Python binding for libssh2 library srv:~# aptitude install libssh2-1-dev libssh2-php
Installation du module avec PECL
On peut donc enfin installer le module :
srv:~# pecl install ssh2 "channel://pecl.php.net/ssh2-0.11.2" Failed to download pecl/ssh2 within preferred state "stable", latest release is version 0.11.2, stability "beta", use "channel://pecl.php.net/ssh2-0.11.2" to install [...] Build process completed successfully Installing '/usr/lib/php5/20090626+lfs/ssh2.so' install ok: channel://pecl.php.net/ssh2-0.11.2 configuration option "php_ini" is not set to php.ini location You should add "extension=ssh2.so" to php.ini aladdin:~# grep extension /etc/php5 -r /etc/php5/conf.d/gd.ini:extension=gd.so /etc/php5/conf.d/ssh2.ini:extension=ssh2.so /etc/php5/conf.d/snmp.ini:extension=snmp.so
L’installation se charge toute seule d’activer l’extension ssh2.so dans les fichiers de conf PHP.
Exemple de code d’un transfert
define ("SSH_KEY","/path/to/.ssh/id_dsa"); define ("SSH_FINGERPRINT","BXXXXXXXXXXXXXXXXXXXXXX81"); # à récupérer la première fois ... $ssh = ssh2_connect(SSH_SERVER,SSH_PORT); if (ssh2_fingerprint ($ssh,SSH2_FINGERPRINT_MD5) != SSH_FINGERPRINT) { # bien penser à contrôler le fingerprint ; c'est dommage de s'en priver ! echo "c'est mal"; } if (!ssh2_auth_pubkey_file($ssh, SSH_LOGIN, SSH_KEY.".pub", SSH_KEY, '')) { echo "authentif par clef ratée"; } ... if (@ssh2_scp_recv ($ssh, $fich_src, $fich_dest)) { echo "transfert OK"; } ...
L’article scp et SSH en PHP est apparu en premier sur Le blog de Michauko.