安裝php ssh2擴展


本文目的

花了一下午時間,終於弄清楚了如何在php中使用libssh2擴展。在這個過程中遇到了一些問題,在解決問題的過程中加深了對php和ssh2的理解。所以,還是決定抽點時間回顧整個過程,作為備忘。

 

什么是php的ssh2擴展

Php ssh2擴(以下簡稱PECL/ssh2),允許在php程序中遠程執行系統命令和文件傳輸,不需要在被監控的機器上單獨開發和部署類似agnet的“木馬”程序,大大降低了運維成本。

 

Php ssh2擴展需要的依賴庫

  • openssl: 加密算法集合,C語言實現
  • libssh2:ssh2協議庫庫,C語言實現
  • PECL/ssh2: libssh2的php擴展,允許php程序調用libssh2中的函數

依賴關系:PECL/ssh2 –> libssh2 –> openssl

 

安裝過程

[openssl]

$ cd openssl.x.x.x

$ ./configure --prefix=/your/openssl/home

$ make

$ make install

[libssh2]

$ cd libsshxxxx

$ ./configure --with-libssl-prefix=/your/openssl/home LIBS=-ldl

$ make

$ make install

PS: 配置中的“LIBS=-ldl”十分重要,如果不設置,如果不設置會導致“dlclose無法鏈接等錯誤”

 

[PECL/ssh2]

$ cd ssh2x.x.x

$ phpize

$ ./configure --with-php-config=/your/php/home/bin/php-config LIBS =-ldl

$ make

$ make install

$ vi php.ini

(添加extension=ssh2.so)

$ cp ssh2.so /php.ini/extention_dir

$ cd /apache/bin

$ apachectl restart (重啟apache,使ssh2擴展生效)

$ php –I | grep ssh2 (檢查PECL/ssh2是否安裝成功,什么都沒有標識沒有成功)

PS: 配置中的“LIBS=-ldl”十分重要,如果不設置,會導致“libssh2 version >= 0.4 not found”錯誤,可以通過查看config.log,定位具體的bug位置,與安裝libssh類似。

 

Php ssh2 API例子

通過PECL/ssh2相關API遠程操作計算機時,首先需要獲取鏈接,使用函數:

session ssh2_connect($host, $port)

獲取鏈接后,需要進行驗證,也就是登錄,ssh2提供三種登入方式:

  • public key : 通過公鑰和密鑰進行驗證,需要使用openssl生成工密鑰,然后將公鑰上傳到需要遠程訪問機器的指定目錄。特點比較安全,但是不太方便。PECL/ssh2支持。
  • password : 直接通過用戶名和密碼登錄。特點是很方便,但是不安全,密碼必須已明文的方式傳給ssh2的api。PECL/ssh2支持。
  • keyboard-interactive:需要用戶手動輸入密碼,PECL/ssh2不支持。

可以通過下面的api獲取服務器提供的驗證方式:

mixed ssh2_auth_none ( resource $session , string $username )

返回值是一個驗證方式的字符串數組。

下面的代碼演示password方式驗證並在遠程調用”pwd”命令:

<?php

$host='ip_or_host';

$user='some_user';

$passwd='your_password';

// 鏈接遠程服務器

$connection = ssh2_connect($host, 36000);

if (!$connection) die('connection to '.$host.':3600 failed');

echo 'connection OK<br/>';

// 獲取驗證方式並打印

$auth_methods = ssh2_auth_none($connection, $user);

print_r( $auth_methods.'<br/>');

if (in_array('password', $auth_methods ))

{

    // 通過password方式登錄遠程服務器

    if (ssh2_auth_password($connection, $user, $passwd))

    {

        echo $user.' login OK<br/>';

        $stream = ssh2_exec($connection, "pwd"); // 執行php

        stream_set_blocking($stream, true); // 獲取執行pwd后的內容

         if ($stream === FALSE) die("pwd failed");

        echo 'pwd: '.stream_get_contents($stream).'<br/>';

    }

    else

    {

        die( $user.' login Failed<br/>');

    }

}

?>

總結

安裝php擴展的一般過程:

1. phpize,生成配置文件和makefile等

2. ./configure && make && make install

3. 邊界php.ini,添加extension

4. 將編譯的so文件考到extension_dir目錄下

5. 重啟apche

6. 查看phpinfo或“php –i| grep xxxx”輸出的頁面中是否存需要安裝的擴展

PS: 配置過程中,如果發現一些問題,可以通過查看config.log查看問題發生位置。

 

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM