首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Linux 下 PHP 安裝 SSH2 擴展完整指南

     編輯:PHP 綜合知識

依賴關係

libssh2 (C 庫) → php-ssh2 (PECL 擴展) → PHP 腳本調用 ssh2_* 函數

編譯安裝步驟 (CentOS 7 / Ubuntu 18+ 驗證通過)

1. 安裝編譯工具鏈與依賴

# CentOS/RHEL
yum install -y gcc gcc-c++ make autoconf libtool openssl-devel

# Ubuntu/Debian
apt-get install -y build-essential autoconf libtool libssl-dev

2. 編譯安裝 libssh2

cd /usr/local/src
wget https://www.libssh2.org/download/libssh2-1.10.0.tar.gz
tar xzf libssh2-1.10.0.tar.gz
cd libssh2-1.10.0
./configure --prefix=/usr/local/libssh2
make && make install

3. 安裝 php-ssh2 擴展

cd /usr/local/src
wget https://pecl.php.net/get/ssh2-1.3.1.tgz   # 當前穩定版
tar xzf ssh2-1.3.1.tgz
cd ssh2-1.3.1

# 關鍵:指定 php-config 與 libssh2 路徑
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config \
            --with-ssh2=/usr/local/libssh2
make && make install

4. 啟用擴展

# 查擴展目錄
/usr/local/php/bin/php-config --extension-dir
# 輸出範例:/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902

# 複製 .so (make install 通常已自動複製,若無則手動)
cp modules/ssh2.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/

# 修改 php.ini
echo "extension=ssh2.so" >> /usr/local/php/etc/php.ini

# 重啟 PHP-FPM
systemctl restart php-fpm
# 或舊版:/etc/init.d/php-fpm restart

5. 驗證安裝

/usr/local/php/bin/php -m | grep ssh2
# 輸出 ssh2 即成功

# 或寫測試腳本
php -r "var_dump(extension_loaded('ssh2'));"

常見報錯與解決

錯誤原因修復
configure: error: The required libssh2 library was not foundlibssh2 未安裝或路徑錯誤確認 --with-ssh2 指向正確 prefix
phpize: command not found未安裝 php-devel/php-devyum install php-devel 或 apt install php-dev
undefined symbol: ssh2_sftp_initlibssh2 版本過舊 (< 1.2)升級 libssh2 ≥ 1.4.2
擴展不生效php.ini 載入錯誤或未重啟 FPMphp --ini 確認載入檔,重啟服務

快捷安裝 (生產環境推薦)

# CentOS 7+ (EPEL)
yum install -y epel-release
yum install -y php-pecl-ssh2   # 自動處理依賴

# Ubuntu 20.04+
apt-get install -y php-ssh2

# Alpine
apk add php8-pecl-ssh2

PHP 代碼快速驗證

<?php
$conn = ssh2_connect('192.168.1.100', 22);
if (ssh2_auth_password($conn, 'root', 'password')) {
    echo "SSH2 連線認證成功\n";
    $stream = ssh2_exec($conn, 'uptime');
    stream_set_blocking($stream, true);
    echo stream_get_contents($stream);
} else {
    echo "認證失敗\n";
}
?>

總結

核心鏈路:libssh2 → phpize → configure(with-ssh2) → make install → php.ini → restart。生產環境優先用系統包管理器一鍵安裝,源碼編譯僅用於特定版本需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved