所以我有一个类,我在php中使用ssh2包构建。我已经成功地设置了它,并在apache2服务器上使用和测试了这个类。在工作的服务器上,它将运行是一个litespeed实例。我已经在网上搜索了一种方法来让ssh2与这个lite - speed服务器一起工作,但是我不能为我的生活弄清楚。我得到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的可选二进制附加组件。我会做一个快速的phpinfo();
页面,并将其添加到litesspeed服务器,这样您就可以看到哪些模块是活动的,php使用的配置文件实际上位于磁盘上。
安装指南可以引导你安装这个pecl扩展。https://www.php.net/manual/en/ssh2.requirements.php
另一种方法是使用不依赖于特殊插件的纯php库。Phpseclib在纯php中完全实现了SSH协议,如果有库就利用它们,但没有库也能正常工作。
既然你没有提到你的服务器环境到底是什么
我会假设它要么OpenLiteSpeed图像,或CyberPanel图像
首先编译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加载