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.
- 1814 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.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 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
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Igen. a ./configure lefut, a make már olyan hosszú warning- és error sorokat ad, hogy a terminálom sem bírja. Arch-on nem fordul..
Néhány sor a több százból:
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: expected 'int' but argument is of type 'char *'
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1127:115: warning: passing argument 3 of 'zend_fetch_resource' makes pointer from integer without a cast [-Wint-conversion]
if ((data = (php_ssh2_pkey_subsys_data *)zend_fetch_resource(Z_RES_P(zpkey_data), PHP_SSH2_PKEY_SUBSYS_RES_NAME, le_ssh2_pke
^
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: expected 'const char *' but argument is of type 'int'
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1127:43: error: too few arguments to function 'zend_fetch_resource'
if ((data = (php_ssh2_pkey_subsys_data *)zend_fetch_resource(Z_RES_P(zpkey_data), PHP_SSH2_PKEY_SUBSYS_RES_NAME, le_ssh2_pke
^
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: declared here
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1143:74: error: macro "add_assoc_stringl" requires 5 arguments, but only 4 given
add_assoc_stringl(&key, "name", (char *) keys[i].name, keys[i].name_len);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1143:3: error: 'add_assoc_stringl' undeclared (first use in this function)
add_assoc_stringl(&key, "name", (char *) keys[i].name, keys[i].name_len);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1144:74: error: macro "add_assoc_stringl" requires 5 arguments, but only 4 given
add_assoc_stringl(&key, "blob", (char *) keys[i].blob, keys[i].blob_len);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1150:74: error: macro "ZVAL_STRINGL" requires 4 arguments, but only 3 given
ZVAL_STRINGL(&attr, keys[i].attrs[j].value, keys[i].attrs[j].value_len);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1150:4: error: 'ZVAL_STRINGL' undeclared (first use in this function)
ZVAL_STRINGL(&attr, keys[i].attrs[j].value, keys[i].attrs[j].value_len);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1151:21: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
hash_key_zstring = zend_string_init(keys[i].attrs[j].name, keys[i].attrs[j].name_len, 0);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1152:61: error: macro "zend_hash_add" requires 6 arguments, but only 3 given
zend_hash_add(Z_ARRVAL_P(&attrs), hash_key_zstring, &attr);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1152:4: error: 'zend_hash_add' undeclared (first use in this function)
zend_hash_add(Z_ARRVAL_P(&attrs), hash_key_zstring, &attr);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c: In function 'zif_ssh2_auth_agent':
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1175:2: error: unknown type name 'LIBSSH2_AGENT'
LIBSSH2_AGENT *agent = NULL;
^
In file included from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:28:0:
/usr/src/php-ssh2/ssh2/ssh2-1.0/php_ssh2.h:96:55: warning: passing argument 1 of 'zend_fetch_resource' makes pointer from integer without a cast [-Wint-conversion]
if ((session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zsession), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session)) == NULL
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1183:2: note: in expansion of macro 'SSH2_FETCH_NONAUTHENTICATED_SESSION'
SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession);
^
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: expected 'zval ** {aka struct _zval_struct **}' but argument is of type 'int'
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
In file included from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:28:0:
/usr/src/php-ssh2/ssh2/ssh2-1.0/php_ssh2.h:45:36: warning: passing argument 2 of 'zend_fetch_resource' makes integer from pointer without a cast [-Wint-conversion]
#define PHP_SSH2_SESSION_RES_NAME "SSH2 Session"
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/php_ssh2.h:96:74: note: in expansion of macro 'PHP_SSH2_SESSION_RES_NAME'
if ((session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zsession), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session)) == NULL
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1183:2: note: in expansion of macro 'SSH2_FETCH_NONAUTHENTICATED_SESSION'
SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession);
^
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: expected 'int' but argument is of type 'char *'
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
In file included from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:28:0:
/usr/src/php-ssh2/ssh2/ssh2-1.0/php_ssh2.h:96:101: warning: passing argument 3 of 'zend_fetch_resource' makes pointer from integer without a cast [-Wint-conversion]
if ((session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zsession), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session)) == NULL
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1183:2: note: in expansion of macro 'SSH2_FETCH_NONAUTHENTICATED_SESSION'
SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession);
^
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: expected 'const char *' but argument is of type 'int'
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
In file included from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:28:0:
/usr/src/php-ssh2/ssh2/ssh2-1.0/php_ssh2.h:96:35: error: too few arguments to function 'zend_fetch_resource'
if ((session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zsession), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session)) == NULL
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1183:2: note: in expansion of macro 'SSH2_FETCH_NONAUTHENTICATED_SESSION'
SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession);
^
In file included from /usr/include/php/Zend/zend_API.h:27:0,
from /usr/include/php/main/php.h:39,
from /usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:25:
/usr/include/php/Zend/zend_list.h:83:16: note: declared here
ZEND_API void *zend_fetch_resource(zval **passed_id TSRMLS_DC, int default_id, const char *resource_type_name, int *found_res
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1194:10: warning: implicit declaration of function 'libssh2_agent_init' [-Wimplicit-function-declaration]
agent = libssh2_agent_init(session);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1194:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
agent = libssh2_agent_init(session);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1201:6: warning: implicit declaration of function 'libssh2_agent_connect' [-Wimplicit-function-declaration]
if (libssh2_agent_connect(agent)) {
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1203:3: warning: implicit declaration of function 'libssh2_agent_free' [-Wimplicit-function-declaration]
libssh2_agent_free(agent);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1207:6: warning: implicit declaration of function 'libssh2_agent_list_identities' [-Wimplicit-function-declaration]
if (libssh2_agent_list_identities(agent)) {
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1209:3: warning: implicit declaration of function 'libssh2_agent_disconnect' [-Wimplicit-function-declaration]
libssh2_agent_disconnect(agent);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1215:8: warning: implicit declaration of function 'libssh2_agent_get_identity' [-Wimplicit-function-declaration]
rc = libssh2_agent_get_identity(agent, &identity, prev_identity);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1231:8: warning: implicit declaration of function 'libssh2_agent_userauth' [-Wimplicit-function-declaration]
if (!libssh2_agent_userauth(agent, username, identity)) {
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c: At top level:
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1249:35: error: unknown type name 'zend_resource'
static void php_ssh2_session_dtor(zend_resource *rsrc TSRMLS_DC)
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1279:36: error: unknown type name 'zend_resource'
static void php_ssh2_listener_dtor(zend_resource *rsrc TSRMLS_DC)
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1290:39: error: unknown type name 'zend_resource'
static void php_ssh2_pkey_subsys_dtor(zend_resource *rsrc TSRMLS_DC)
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c: In function 'zm_startup_ssh2':
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1305:55: error: 'php_ssh2_session_dtor' undeclared (first use in this function)
le_ssh2_session = zend_register_list_destructors_ex(php_ssh2_session_dtor, NULL, PHP_SSH2_SESSION_RES_NAME, module_number);
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1306:55: error: 'php_ssh2_listener_dtor' undeclared (first use in this function)
le_ssh2_listener = zend_register_list_destructors_ex(php_ssh2_listener_dtor, NULL, PHP_SSH2_LISTENER_RES_NAME, module_number
^
/usr/src/php-ssh2/ssh2/ssh2-1.0/ssh2.c:1307:52: error: 'php_ssh2_sftp_dtor' undeclared (first use in this function)
le_ssh2_sftp = zend_register_list_destructors_ex(php_ssh2_sftp_dtor, NULL, PHP_SSH2_SFTP_RES_NAME, module_number);
^
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- 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