Kiểm tra PHP nếu ssh2 được cài đặt

Xin chào,
Tôi vừa thử nghiệm nó và có thể cài đặt tiện ích mở rộng ssh2 php trong Rocky Linux 8

root@rocky ~]# php -m  |grep ssh
ssh2
[root@rocky ~]#

Tôi đã sử dụng bước dưới đây

dnf cài đặt libssh2-devel. x86_64
pecl tìm kiếm ssh2
cài đặt pecl -a ssh2-1. 3. 1
tiếng vang “tiện ích mở rộng = ssh2. vậy” > /etc/php. d/40-ssh2. ban đầu

Tôi đang sử dụng php7. 4

[root@rocky ~]# php -v
PHP 7.4.19 (cli) (built: May  4 2021 11:06:37) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies
[root@rocky ~]#

Bài viết này mô tả sự cố mà tôi gặp phải khi phát triển ứng dụng SSH với PHP 8. 0 trên Windows 10 và giải pháp

Môi trường

  • Windows 10 Chuyên nghiệp
  • XAMPP 8. 0. 6 – 2021-05-11
  • PHP8. 0. 6

Mã ví dụ

1

2

3

4

5

6

7

8

9

10

11

12

13

$kết nối = ssh2_connect($host, $port, array('hostkey'=>'ssh-rsa'));

 

if (ssh2_auth_pubkey_file(

                        $kết nối,

                        $tên người dùng,

                        $filename_pub,

                        $filename_prv,

                        $filename_pwd))

{

        echo "Xác thực khóa công khai thành công\n";

} khác {

        chết('Xác thực khóa công khai không thành công');

}

Dòng mã có vấn đề

1

$kết nối = ssh2_connect($host, $port, array('hostkey'=>'ssh-rsa'));

Tạo ra lỗi này

1

2

3

4

Lỗi nghiêm trọng. Không phát hiện được Lỗi. Gọi đến hàm không xác định ssh2_connect . () in ssh-copy-id.php. 17

Ngăn xếp dấu vết.

#0 {chính}

  ném vào ssh-copy-id.php trên dòng 17

Sau đó tôi đã kiểm tra php. ini để xác minh rằng phần mở rộng PHP extension=php_ssh2. dll đã được tải. Nó không phải là

Tôi đã bỏ ghi chú (đã bật) dòng này và kiểm tra kỹ rằng php_ssh2. dll nằm trong thư mục ext

Sau đó, tôi nhận được một lỗi khác

1

Cảnh báo. PHP Khởi động. Không thể to tải thư viện động . dll' 'php_ssh2.dll' (đã thử. C. \xampp\php\ . ext\php_ssh2.dll (Mô-đun được chỉ định . could not be found), C:\xampp\php\ . ext\php_php_ssh2.dll. dll (Mô-đun được chỉ định module could not be found)) in Unknown on line 0

Hmm, DLL ở đó, nhưng tôi không biết DLL đó đến từ đâu hoặc phiên bản của nó

Tôi đã mở thư mục trong Windows Explorer, nhấp chuột phải vào tệp và chọn Thuộc tính. Tab chi tiết hiển thị như sau

Kiểm tra PHP nếu ssh2 được cài đặt

Phiên bản Sản phẩm DLL là 7. 4. 13

Một phương pháp khác sử dụng PowerShell

1

2

3

4

powershell '(Nhận vật phẩm ". /php_ssh2. dll"). Thông tin phiên bản. Phiên bản sản phẩm'

 

Đầu ra.

7. 4. 13

Cái nào cũng hiển thị phiên bản là 7. 4. 13. PHP 8 có lẽ cần một phiên bản mới hơn

Ghi chú. sau này trong bài viết này, tôi khám phá ra lý do tại sao. PHP có phiên bản API mở rộng

Giải pháp

Vào trang tải xuống PECL cho SSH2, tôi đã tải xuống phiên bản gói mới nhất, 1. 3. 1 cho 64-bit An toàn luồng VS16. Tôi chọn VS16 vì XAMPP phiên bản 8. 0. 6 chỉ định VS16. VS16 có nghĩa là trình biên dịch được đóng gói với Visual Studio 2019. []

Sử dụng các phương pháp trước đó, tôi đã kiểm tra phiên bản. Gói SSH2 phiên bản 1. 3. 1 chứa phiên bản DLL 8. 0. 0. Cần làm việc. Đã tải xuống tệp zip, giải nén và sao chép thủ công tệp DLL và PDB vào thư mục ext

Sau đó tôi đã thử lại chương trình của mình và thành công

1

2

php ssh-bản sao-id.php

Khóa Công khai Xác thực Thành công

Thông tin chi tiết

XAMPP Phiên bản 8. 0. 6

Vì sự cố xảy ra trên hệ thống sử dụng XAMPP 8. 0. 6, tôi muốn kiểm tra lại xem XAMPP có vấn đề gì không. Điều này có nghĩa là tạo một hệ thống mới và cài đặt XAMPP

Tôi đã tạo một máy ảo với Windows 10 Professional và cài đặt XAMPP 8. 0. 6. Sau đó tôi đã kiểm tra C. thư mục \xampp\php\ext. php_ssh2. không tìm thấy dll. Điều này có nghĩa là ai đó đã sao chép DLL theo cách thủ công từ bản cài đặt cũ hơn sang hệ thống có vấn đề của tôi

XAMPP không phải là nguồn gốc của vấn đề. Lỗi của con người rất có thể là nguồn gốc của vấn đề

Phát hiện tiện ích mở rộng

Đoạn mã sau sẽ phát hiện nếu tiện ích mở rộng được cài đặt

1

2

3

4

nếu (. extension_loaded('ssh2')) {

        echo 'Lỗi. Chương trình này yêu cầu phần mở rộng PHP ssh2' . PHP_EOL;

        thoát(1);

}

Tuy nhiên, ví dụ này không ngăn thông báo cảnh báo PHP nếu tiện ích mở rộng được cài đặt nhưng không tải đúng cách

1

Cảnh báo. PHP Khởi động. Không thể to tải thư viện động . 'ssh2' (tried: C. \xampp\php\ . ext\ssh2 (The specified module could not be found), C:\xampp\php\ . ext\php_ssh2.dll (Mô-đun được chỉ định module could not be found)) in Unknown on line 0

Tệp PHP INI

Để xác định php. ini, hãy thực hiện lệnh này

1

php --ini

Ghi chú. Nếu bạn đã cấu hình Apache với PHP, bạn sẽ có hai hoặc nhiều php. vị trí ini. Một cho CLI và một cho Apache. Trong trường hợp của tôi, tôi cài đặt PHP-FPM, vì vậy có một phần ba

Đối với Apache, tạo một tệp PHP “không dễ tìm” với nội dung sau

1

2

<?php

phpinfo();

Sau đó tải tệp đó qua URL trong trình duyệt web. Trang này sẽ chứa vị trí tệp mà Apache đang sử dụng cho php. ban đầu. Khi bạn đã hoàn tất, hãy xóa tệp. Đầu ra chứa thông tin nhạy cảm

Tìm tập tin PHP INI

PHP hỗ trợ nhiều phương thức để khai báo vị trí của php. tập tin ini nằm

Cấu hình thời gian chạy PHP

PHP hỗ trợ biến môi trường PHPRC. [link] Ví dụ cho Windows

1

2

3

4

5

6

7

đặt PHPRC=C. \PHP-GỠ LỖI-CONFIGURATION

 

php --ini

Cấu hình Tệp (php. trong) Đường dẫn.

Đã tải Cấu hình Tệp.          C. \PHP-GỠ LỖI- . CONFIGURATION\php.ini

Quét để tìm bổ sung . ini tệp in. (không có)

Bổ sung . ini tệp được phân tích cú pháp.       (không có)

Windows XAMPP

Trên Windows, XAMPP sử dụng cùng một vị trí cho CLI và Apache

XAMPP sử dụng chỉ thị PHPIniDir nằm trong httpd-xampp. conf

1

2

3

<IfModule php_module>

    PHPINIDir "C. /xampp/php"

</IfModule>

Tôi sử dụng lệnh này để tìm kiếm

1

2

cd \

dir /s *php. ini*

Linux/Ubuntu

Để tìm kiếm hệ thống tập tin cho php. ini, cài đặt gói mlocate (Ubuntu) và thực hiện lệnh này

1

xác định vị trí php. ini

Ghi chú. cài đặt gói mlocate tạo cơ sở dữ liệu gồm các tệp và công việc định kỳ để cập nhật cơ sở dữ liệu. Nếu bạn không muốn một quá trình nền khác chạy, hãy sử dụng ví dụ về lệnh find tiếp theo

Trên Ubuntu 20 của tôi. 04 hệ thống với PHP 7. 4 đã cài đặt, một số php. tập tin ini được đặt

1

2

3

4

5

6

/vv/php/7.4/Apache2/php. ini

/vv/php/7.4/cli/php. ini

/vv/php/7.4/fpm/php. ini

/usr/lib/php/7.4/php. ini-phát triển

/usr/lib/php/7.4/php. ini-sản xuất

/usr/lib/php/7.4/php. ini-sản xuất. cli

Một lệnh khác tạo ra một đầu ra tương tự

1

sudo tìm / -iname "*php.ini*"

Thư mục tiện ích mở rộng PHP

Khi cài đặt Windows XAMPP của tôi, thư mục tiện ích mở rộng PHP là C. \xampp\php\ext. Vị trí này có thể định cấu hình trong php. tập tin ini

1

extension_dir="C. \xampp\php\ext"

Chi tiết tiện ích mở rộng PHP

Một mục mà tôi nhận thấy với PHP 8. 0 và 8. 1. Nếu bạn chỉ định một mô-đun X trong php. ini, CLI sẽ tìm kiếm X và sau đó là php_X. dll. Điều này có nghĩa là php_ssh2. gói dll có thể được chỉ định là extension=ssh2

Tôi thấy rằng php_ssh2. dll không hoạt động với PHP 8. 1 trên Windows. Khi phân tích vấn đề này, tôi nhận thấy một số mục được xuất bởi php -i

  • API PHP => 20200930
  • Phần mở rộng PHP => 20200930
  • Tiện ích mở rộng Zend => 420200930
  • Bản dựng tiện ích mở rộng Zend => API420200930,TS,VS16
  • Bản dựng tiện ích mở rộng PHP => API20200930,TS,VS16

Tôi không biết về phiên bản API. Chi tiết lỗi từ PHP 8. 1

Cảnh báo. Khởi động PHP. ssh2. Không thể khởi tạo mô-đun
Mô-đun được biên dịch với API mô-đun=20200930
PHP được biên dịch với API mô-đun=20210902

Chuỗi TS,VS16 có nghĩa là Thread-Safe Visual Studio 2019. Điều đó giúp xác định cách biên dịch và xây dựng php_ssh2. dll

Đang tải tiện ích mở rộng khi chạy

CLI có thể tải tiện ích mở rộng PHP bằng tùy chọn dòng lệnh

1

2

3

php -d tiện ích mở rộng=C:/xampp/php/ . ext/php_ssh2 test.php

 

php -d tiện ích mở rộng=php_ssh2 test.php

Điều này hữu ích khi phát triển ngoại lệ và xử lý lỗi cho tiện ích mở rộng

câu hỏi chưa được giải quyết

Windows 10 Chuyên nghiệp

  • DLL này có tương thích với PHP 8 không. 1 vì phiên bản đó không được đề cập?
    • Không. Kiểm tra sơ bộ kết quả trong lỗi
      • Cảnh báo PHP. Khởi động PHP. Không thể tải thư viện động ‘php_ssh2. dll'…
    • Vấn đề GitHub này báo cáo vấn đề tương tự

Ubuntu 20. 04

  • Xác thực hỗ trợ LIBSSH2 trên Ubuntu 20. 04 với PHP 8. 0 và PHP8. 1

Thêm thông tin

  • Vỏ bảo mật PHP2
  • LIBSSH2
  • Các ràng buộc cho thư viện libssh2
  • GitHub. Mã nguồn

Thẻ bài viết

thẻ. PHP, PHP8, SSH

Tóm lược

Để cài đặt các ràng buộc LIBSSH2 cho PHP 8 trên Windows 10, hãy hoàn thành các bước sau

  • Tải xuống các phiên bản chính xác từ đây
  • Giải nén gói và sao chép php_ssh2. dll và tùy chọn php_ssh2. pdf vào thư mục mở rộng PHP của bạn. Trên hệ thống của tôi đó là C. \xampp\php\ext
  • chỉnh sửa php. ini và bỏ ghi chú hoặc thêm dòng extension=php_ssh2. dll

Phát triển phần mềm không chỉ là viết mã. Chúng ta cần biết cách định cấu hình hệ thống và ghi lại các quy trình đó. Ngoài ra, điều quan trọng là chúng ta cần viết mã hoặc tập lệnh để định cấu hình và kiểm tra môi trường của mình. Không có gì tệ hơn là làm việc nhiều giờ, phát hành một sản phẩm tuyệt vời mà sau đó trở thành cơn ác mộng hỗ trợ khách hàng

Tín dụng nhiếp ảnh

Tôi viết bài miễn phí về công nghệ. Gần đây, tôi đã biết về Pexels. com cung cấp hình ảnh miễn phí. Hình ảnh trong bài viết này được cung cấp bởi Pixabay tại Pexels

Kiểm tra PHP nếu ssh2 được cài đặt

John Hanley

Tôi thiết kế phần mềm cho các hệ thống cấp doanh nghiệp và trung tâm dữ liệu. Nền tảng của tôi là hơn 30 năm về ảo hóa lưu trữ (SCSI, FC, iSCSI, mảng đĩa, hình ảnh). Hơn 20 năm trong lĩnh vực nhận dạng, bảo mật và pháp y

Trong hơn 14 năm qua, tôi đã làm việc trong lĩnh vực đám mây (AWS, Azure, Google, Alibaba, IBM, Oracle) để thiết kế các giải pháp phần mềm lai và đa đám mây. Tôi là một MVP/GDE với một số

Làm cách nào để bật ssh2 trong PHP?

Nếu bất kỳ ai gặp sự cố khi cài đặt SSH2, đây là cách tôi đã thực hiện. .
Tải xuống thư viện SSH2 PECL từ PHP. net [chọn phiên bản phù hợp]
Sao chép libssh2. dll vào thư mục System32 [x86] hoặc SysWOW64 [x64]
Sao chép php_ssh2. dll và php_ssh2. .
Di dời ';' . .
Khởi động lại Apache

Phần mở rộng ssh2 PHP là gì?

Tiện ích mở rộng SSH2 cung cấp các chức năng để truy cập máy từ xa bằng giao thức SSH và SFTP an toàn .

Chức năng của ssh2 là gì?

Gen này mã hóa một loại protein tyrosine phosphatase đóng vai trò chính trong việc điều hòa các sợi actin . Protein được mã hóa khử phospho hóa và kích hoạt cofilin, thúc đẩy quá trình khử polyme hóa sợi Actin.

Làm cách nào để cài đặt ssh2 trên Ubuntu?

Ubuntu 16. 04 LTS – Cách cài đặt tiện ích mở rộng ssh2 php7 .
Bước 1 – Cập nhật kho lưu trữ
Bước 2 – Cài đặt các gói bằng các lệnh sau
Bước 3 – Bạn phải Tải xuống nguồn từ trang web chính thức của lib ssh2 và cài đặt
Bước 4 – Giải nén tệp zip
Bước 5 – Điều hướng đến thư mục php