找不到 ssh2 ssh2_connect() 函数

ssh2 ssh2_connect() function not found

所以我构建了一个 class,它使用 php 中的 ssh2 包。我已经在 apache2 服务器上成功设置并使用和测试了这个 class。 运行ning 所在的工作服务器是 litespeed 的一个实例。我已经在网上搜索了一种让 ssh2 与这个 litespeed 服务器一起工作的方法,但是我终其一生都无法弄清楚。我找不到 ssh2_connect() 函数。如果我去 /etc/php/... 我可以看到 ssh2.ini 文件存在。但是我相信活动的 php 实例位于 /usr/local/lsws/lsphp74/7.4/etc/php/ 我没有看到 ss2.ini 的位置。有没有办法将 ssh2 安装在服务器正在使用的目录中?如果我 运行 ssh2_connect 在命令提示符下,它工作得很好,因为它很可能使用 php.

的 /etc/php 实例

你说得对,ssh2_connect() 是由 pecl 扩展提供的。这些是 php 的可选二进制 add-ons。我会快速创建一个 phpinfo(); 页面并将其添加到 litespeed 服务器,这样您就可以看到哪些模块处于活动状态以及 php 使用的配置文件实际位于磁盘上的位置。

安装指南可以引导您安装此 pecl 扩展。 https://www.php.net/manual/en/ssh2.requirements.php

实现此目的的另一种方法是使用不依赖于特殊 plug-ins 的 pure-php 库。 phpseclib 在纯 php 中完全实现了 ssh 协议,利用库(如果它们存在但没有它们也能运行)。

因为你没有提到你的服务器环境到底是什么

我假设它是 OpenLiteSpeed 图像或 Cyber​​Panel 图像

首先,编译libssh2

wget https://libssh2.org/download/libssh2-1.10.0.tar.gz
tar vxzf libssh2-1.10.0.tar.gz
cd libssh2-1.10.0
./configure
make
make install

然后编译PHP扩展

mkdir /usr/local/lsws/lsphp74/tmp
pecl channel-update pecl.php.net
/usr/local/lsws/lsphp74/bin/pear config-set temp_dir "/usr/local/lsws/lsphp74/tmp"
/usr/local/lsws/lsphp74/bin/pecl install https://pecl.php.net/get/ssh2-1.3.1.tgz
echo "extension=ssh2.so" > /usr/local/lsws/lsphp74/etc/php/7.4/mods-available/50-ssh2.ini

最后,重启 lsphp 进程以加载新模块

touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt

killall lsphp

然后通过 phpinfo(); 验证以确保您看到 ssh2 已加载