为PHP安装PECL SSH2扩展

15
我正在尝试在Centos 5(RHEL 5的一个分支)上安装这个https://www.php.net/manual/en/book.ssh2.php
我已经安装了位于/usr/lib目录下的libssh2(yum install libssh2),当我安装SSH2扩展(通过pecl install -f ssh2)时,我收到了以下消息:

在默认路径中检查ssh2文件...未找到 configure: error: 未找到所需的libssh2库。您可以从http://sourceforge.net/projects/libssh2/获取该软件包。 ERROR: `/tmp/pear/download/ssh2-0.11.0/configure --with-ssh2=/usr' 失败

如果我设置为/usr/lib,我会收到相同的消息:

ERROR: `/tmp/pear/download/ssh2-0.11.0/configure --with-ssh2=/usr/lib' 失败

问题出在哪里?
7个回答

24

你从哪个代码仓库获取的?我在默认或原子仓库中找不到它。 - Ian Dunn
我们不需要安装 pecl 吗? - ericn
此安装过程无需使用PECL,但您可能有其他解决方案。 - Cédric Girard
安装了libssh2-devel之后,您可以“pecl install ssh-1.1.2”或任何最新版本,它都可以正常工作。编辑:没有意识到这是2009年的帖子,但仍然有效。 :P - user5174817
这些代码适用于CentOS,可能也适用于MAC。它适用于Ubuntu吗?将yum替换为apt-get? - Paulo Boaventura

11
$ sudo pecl channel-update pecl.php.net
$ sudo apt-get install libssh2-1-dev
$ sudo pecl install -a ssh2-0.12
$ echo 'extension=ssh2.so' | sudo tee /etc/php5/mods-available/ssh2.ini > /dev/null
$ sudo php5enmod ssh2

2
在 Vagrant 上的 Ubuntu 系统上运行良好。 - ZurabWeb
3
如果您的 Vagrant box 正在运行 php 7,请按照 官方文档 的说明执行 sudo pecl install -a ssh2-1.0 - avn
我按照指示操作,当我通过Apache运行PHP时,模块是可用的。但是当我从命令行运行PHP时,模块不可用。在这种情况下,你会怎么做? - Rayhan Muktader

3
这是更新的answer,来自@serghei + @avn在PHP 7.x的工作解决方案下的评论修改。
$ sudo pecl channel-update pecl.php.net
$ sudo apt-get install libssh2-1-dev
$ sudo pecl install -a ssh2-1.0
$ echo 'extension=ssh2.so' | sudo tee /etc/php/7.2/mods-available/ssh2.ini > /dev/null
$ sudo phpenmod ssh2

关于这行代码:
echo 'extension=ssh2.so' | sudo tee /etc/php/7.2/mods-available/ssh2.ini > /dev/null

确保路径/etc/php/7.2/mods-available是有效的,并且与您的php版本匹配。

2

yum install libssh2-devel 对我来说不起作用:

没有可用的libssh2-devel软件包。

所以我从rpmfind下载了rpm包,并使用rpm -ivh进行安装。

之后只需将extension=ssh2.so添加到/etc/php.d/ssh2.ini中即可。


1

我正在使用Centos,对我来说这些答案都不是完整的解决方案。我按照这些指示进行操作:

$ sudo yum install -y gcc php-devel php-pear libssh2 libssh2-devel

但是 php-devel 无法安装,提示存在冲突。我在yum中搜索可用的php开发包。

$> yum search php|grep devel
...
php55u-devel.x86_64 : Files needed for building PHP extensions
php56u-devel.x86_64 : Files needed for building PHP extensions
php70u-devel.x86_64 : Files needed for building PHP extensions
...

所以我跑了。
$> sudo yum install -y php56u-devel

它干净地安装了。然后,按照说明继续操作,我运行了

$ pecl install -f ssh2

它已经编译成功了。然后我将扩展添加到php中。

$ touch /etc/php.d/ssh2.ini
$ echo extension=ssh2.so > /etc/php.d/ssh2.ini

在我的系统上,而不是

$ /etc/init.d/httpd restart

我不得不做

$ sudo /bin/systemctl restart  php-fpm.service 

这就是安装的所有步骤。最后进行确认:
$> php -m|grep ssh2
ssh2

0

错误:

checking for ssh2 files in default path... not found
configure: error: The required libssh2 library was not found.

...可以在源代码中看到。

代码逻辑表明,如果无法在/usr/local/usr或可选的--with-ssh2=[DIR]指令提供的路径中找到/include/libssh2.h,则会抛出此错误。换句话说,在没有自定义指令的情况下,它需要找到以下其中之一:

/usr/local/include/libssh2.h
/usr/include/libssh2.h

如果通过了这个检查,它会假定可以在/usr/local/lib/usr/lib找到libssh2 lib
希望上面的信息足以帮助某人调试他们的问题。我的情况相当特殊和不寻常(macOS与Homebrew在自定义安装路径中),但是如果有帮助其他人的话,这里是我的可怕的hacky解决方法。完美地工作了。
简而言之,我正在创建两个临时符号链接,以便pecl可以在其期望的位置找到ssh2。
# First check that neither /usr/local/include nor /usr/local/lib exists

sudo ln -s /usr/local/CustomInstallPath/Homebrew/Cellar/libssh2/1.9.0_1/include /usr/local/include
sudo ln -s /usr/local/CustomInstallPath/Homebrew/Cellar/libssh2/1.9.0_1/lib /usr/local/lib
pecl install -a ssh2-1.3.1
sudo rm -rf /usr/local/include
sudo rm -rf /usr/local/lib

0

我遇到了这个问题:

我使用的是Pair.com的“高级”托管帐户,因此我的操作权限有些受限。我认为我不能使用yumaptitude或其他预编译的软件包。

我已经下载并编译了libssh2。在pecl过程中,它会询问库的位置。它在“~/usr/local/lib”中,我尝试了几种不同的变体,包括完全合格的路径。但我一直收到相同的错误信息。

错误消息没有明确指出它正在寻找哪个文件。libssh2.so就在那个目录中。我知道输出应该是ssh2.so。我想知道是否应该有一个ss2.something,或者libssh.nothing?

我这样解决了它。在我的情况下,在编译libssh2之后,我下载了PEAR tarball。关键是:

./configure --with-ssh2=<libssh2 location> --prefix=<libssh2 location>

另一个技巧是,由于Pair.com正在运行FreeBSD,我必须在./configure命令之后执行“cd .”。否则,make会产生“权限被拒绝”的错误。显然,在所有*nix BSD版本上都需要这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接