php5-ssh2 --- "Call to undefined function ssh2_connect()"

Fórumok

Sziasztok.

debianon sikerült írnom egy fájlba ssh2 segítségével így:

# cat /var/www/html/php/1.php
<?php
$ssh_kapcsolat = ssh2_connect('localhost', 22);
$ssh_belepes= ssh2_auth_password($ssh_kapcsolat, 'a', '123456');
if($ssh_kapcsolat && $ssh_belepes){
$ssh_parancs = ssh2_exec($ssh_kapcsolat, 'echo hopp > /tmp/hoppppp.temp');
print "Parancs sikeresen végrehajtva!";
}else{
print "HIBA! Ellenőrizd a SSH kapcsolat beállításokat."; die;
}
fclose($ssh_kapcsolat);
?>

Parancssorban végrehajtva létrehozta a /tmp-ben a fájlt, egyéb parancssori scriptet is lehet futtatni így

# php ./1.php
Parancs sikeresen végrehajtva

Debianon ezt kellett telepítenem:
apt-get install php5-ssh2

-----------
Arch-on azonban mindez nem sikerült. Itt ilyen nevű csomag nincs, mindössze ezek:

# pacman -Ss ssh2
core/libssh2 1.8.0-1 [installed]
A library implementing the SSH2 protocol as defined by Internet Drafts
extra/java-jsch 0.1.51-1
A pure Java implementation of SSH2
community/python-paramiko 2.1.1-2 [installed]
Python module that implements the SSH2 protocol
community/python-paramiko1 1.16.0-3
Python module that implements the SSH2 protocol (compatibility version)
community/python2-paramiko 2.1.1-2
Python module that implements the SSH2 protocol
community/python2-paramiko1 1.16.0-3
Python module that implements the SSH2 protocol (compatibility version)

Miután a libssh2-t felraktam, újraindítottam a httpd-t, és még mindig ez a hibaüzenet fogadott:

# php ./1.php
PHP Fatal error: Call to undefined function ssh2_connect() in /dev/shm/asd-root/srv/http/domain1.com/nmea/1.php on line 2

Ez pontosan ugyanaz, mint debianon, amikor nem volt fenn a php5-ssh2 csomag. Mivel tudtommal még a csomagok közt is eltérések vannak a distribek közt, nem tudom, mi hiányozhat még az Arch-nak.

A
php -m | grep ssh
parancsra válasz nincs.

Hozzászólások

Gondoltam leforgatom, megtettem:

wget http://www.libssh2.org/download/libssh2-0.14.tar.gz
tar -zxvf libssh2-0.14.tar.gz
cd libssh2-0.14/
./configure
make all install

Minden rendben, a fájlok létrejöttek, csak éppen mintha nem csináltam volna semmit, a hibaüzenet maradt, a php -m |grep ssh kimenete üres..

---
--- A gond akkor van, ha látszólag minden működik. ---
---

A php.ini-ben be kell kapcsolnod az extensiont. Most csak telepítve van, de a php nem használja - a telepített extensionökről, meg úgy általában az egész php runtime állapotáról a phpinfo() függvény kimenete ad tájékoztatást, ez egy HTML oldalt generál.
Nézd meg a php.ini-dben az extension sort, ez sorolja fel azokat a .so fileokat, amiket be kell tölteni extension-ként. Ide kell felvenned az ss2.so filet, így:
http://php.net/manual/en/ssh2.installation.php

Tökre jól le van írva a PHP oldalán ez a telepítés, olvasd el előtte, mielőtt itt kérdezel, azaz RTFM.

Már jártam azon az oldalon, ezzel az eredménnyel végeztem:

PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'libssh2.so' in Unknown on line 0

Amúgy a remek leírás
"2. download the php-ssh2 package from http://pecl.php.net/package/ssh2:"
sora 404-es hibakódot mutat, mellékesen centOS-re vonatkozik ami bizonyára nem baj ARCH-on.

(Szóval amikor ide írok bármit, már napokig szenvedtem mindennel és már sík ideg vagyok. Van, amin egy hónapja, és hiába olvasok egyre több helyen egyre többet..)

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Igen, lehet, hogy ez a baj.

# php --version
PHP 5.6.16 (cli) (built: Dec 10 2015 22:55:25)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
#

# cat /usr/src/php-ssh2/ssh2/package.xml | grep ssh2
...
ssh2 1.0 and above is PHP 7 only.

ctrl-c

----------------
Ha itt az a megoldás, hogy a teljes PHP-t frissítenem kell, akkor leállok. Egyszer már szívtam ezzel, 2 hetet vesztettem az életemből, miközben nem lett szebb az életem.

Szóval most leálltam.

Az enyémen úgy látszik nem.

Amúgy hirtelen ötlettel megnéztem a debianon is, ahol minden működik:

$ php --version
PHP 5.6.11-1ubuntu3.4 (cli)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

5.6.* verziójú PHP-ken is fut az ssh2 az összes kellékével együtt, és a forráskód is lefordul.

Ahogy írtam vala:

Elvileg a debian-csomagban van egy /etc/php/7.0/mods-available/ssh2.ini fájl.

Azaz: a Debian esetében azért működik mindenféle vakarászás nélkül, mert a csomagkészítő volt olyan kedves, és odavágta a csomaghoz a már emlegetett fájlt. Ebben a fájlban elvileg egy olyan sor van, ami ezt a csodás modult engedélyezi. És ezt a fájlt a php induláskor beolvassa.
Arch esetében azért nem (vagy sem) működik, mert a modul nem fog betöltődni addig, amíg valahol nem jelzed neki, hogy be kellene tölteni.

A libssh2 egy C api ami ssh funkciókat valósít meg. Van egy ssh2 csomag a php-hoz, ami ezen C api funkcióit teszi elérhetővé php alatt (native bindings).
Vagyis a libssh2 mellé neked még ez is kell: https://pecl.php.net/package/ssh2
illetve engedélyezned a php.ini -ben

// Happy debugging, suckers
#define true (rand() > 10)