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.
- 1817 megtekintés
 
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 hozzászóláshoz be kell jelentkezni
 
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.
- A hozzászóláshoz be kell jelentkezni
 
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. ---
--- 
- A hozzászóláshoz be kell jelentkezni
 
Nem kell a végére a kettőspont :)
- A hozzászóláshoz be kell jelentkezni
 
Igen, az eredeti oldal linkje rossz. De megkerültem, megtaláltam, letöltöttem, debianon lefordult, Arch-on nem, mint lejjebb írtam.
---
--- A gond akkor van, ha látszólag minden működik. ---
--- 
- A hozzászóláshoz be kell jelentkezni
 
Fent vannak neked a megfelelő PHP fejlesztői csomagok?
- A hozzászóláshoz be kell jelentkezni
 
Nem tudom, mik lehetnek azok. Debianon gondolom igen, Arch-on *-dev csomagok tudtommal nem léteznek.
---
--- A gond akkor van, ha látszólag minden működik. ---
--- 
- A hozzászóláshoz be kell jelentkezni
 
Oké, most már látom, bocsi. Annak lenne értem, hogy Dockerrel kerüld meg a kérdést (eltérő PHP verziók "egy rendszeren")?
- A hozzászóláshoz be kell jelentkezni
 
Alapesetben a PHP az extension_dir-ben megjelölt mappákban keresi a PHP extensionöket. Ha Invalid library hibát kapsz, akkor talán meg kéne nézned, hogy ugyanabba a mappába települt-e a saját magad által megadott libssh2.so, mint ahol a PHP keresi a libeket.
- A hozzászóláshoz be kell jelentkezni
 
Végig ott volt.
# ls -l /usr/lib/php/modules/libssh2.so
-rwxr-xr-x 1 root root 349372 Jan 28 15:59 /usr/lib/php/modules/libssh2.so
Nem véletlenül nem értem.
- A hozzászóláshoz be kell jelentkezni
 
A PHP verzió megegyezik?
Mi van telepítve nálad, és mi van a modul elvárásai között?
A 32-bit, 64-bit architektúra stimmel? Nem lehet, hogy véletlenül amit lefordítottál, az már architketúrára lett lefordítva, mint a PHP runtime, amit telepítettél?
- A hozzászóláshoz be kell jelentkezni
 
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.
- A hozzászóláshoz be kell jelentkezni
 
php --version
Dehát Arch-on jelenleg 7.1.1-es a php!
- A hozzászóláshoz be kell jelentkezni
 
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.
- A hozzászóláshoz be kell jelentkezni
 
Mármint melyik verziója az ssh2 extensionnek? Lehet, hogy fut valami ssh2 extension néven, de régebbi változat, ami még nem igényelt PHP 7-et.
- A hozzászóláshoz be kell jelentkezni
 
Az enyémen úgy látszik nem.
- A hozzászóláshoz be kell jelentkezni
 
Nem kellene a php.ini-ben engedélyezni a modult? Elvileg a debian-csomagban van egy /etc/php/7.0/mods-available/ssh2.ini fájl.
- A hozzászóláshoz be kell jelentkezni
 
Nem tudom.
Debianon, ahol mindez működik és ahol sikerrel jártam, a
cat php.ini | grep ssh
üres sorral tér vissza.
Arch-on van az anomália, ott kínlódok.
---
--- A gond akkor van, ha látszólag minden működik. ---
--- 
- A hozzászóláshoz be kell jelentkezni
 
Inkább a /etc/php/7.0/mods-available/ssh2.ini fájlban lesz a megoldás. Gondolom, a php induláskor automatikusan betölti (php --ini).
- A hozzászóláshoz be kell jelentkezni
 
Nincs ilyenem. Ez ARCH.
#ls -R /etc/php
/etc/php:
conf.d	php.ini  php.ini_old
/etc/php/conf.d:
xcache.ini
- A hozzászóláshoz be kell jelentkezni
 
Ahogy írtam vala:
Elvileg a debian-csomagban van egy
/etc/php/7.0/mods-available/ssh2.inifá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 hozzászóláshoz be kell jelentkezni
 
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
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
 
- A hozzászóláshoz be kell jelentkezni
 
let me google it for you
Arch package: php-ssh, An SSH2 extension for PHP.
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni