Ssh2 php Windows

Kho lưu trữ này chứa tiện ích mở rộng php_ssh2 được biên dịch để sử dụng trên Windows. Bạn được khuyến khích sử dụng bản dựng PECL chính thức của phiên bản 1. 2 - https. //pecl. php. mạng/gói/ssh2/1. 2/cửa sổ

PHP7. 3

Dựa trên cam kết pecl/ssh2 79371dc05ff34e58f796e6755e25ba91c169ac1a (b/c pecl/ssh2 phiên bản 1. 1. 2 không được xây dựng chính xác trên MSVC15 - lỗi trình biên dịch C2088)

Để kết nối máy chủ SFTP (SSH File Transfer Protocol hoặc Secure File Transfer Protocol) từ PHP (WAMP SERVER), trước tiên chúng ta phải bật tiện ích mở rộng SSH2 không khả dụng (theo mặc định) với máy chủ WAMP

Khi tôi bắt đầu với điều này, tôi đã nhận được nhiều giải pháp từ google và phải mất nhiều thời gian để tìm ra giải pháp khả thi chính xác. Vì vậy, tôi kết thúc các bước của mình trong bài viết này và hy vọng nó sẽ giúp được ai đó và tiết kiệm thời gian R&D. Hãy bắt đầu với các bước đơn giản bên dưới –

  1. Tải xuống thư viện SSH2 cần thiết (kiểm tra các phiên bản tương thích với thư viện PHP, Apache và SSH2) từ http. //pecl. php. mạng/gói/ssh2/0. 12/cửa sổ HOẶC https. //các cửa sổ. php. net/tải xuống/pecl/phát hành/ssh2/0. 12/
  2. Trích xuất nội dung của kho lưu trữ và làm theo các bước dưới đây -
    1. Dừng WAMP Server, nếu đang chạy
    2. Đã đặt php_ssh2. dllphp_ssh2. pdb trong thư mục mở rộng của PHP  (wamp\bin\php_vx. x. x\ext).
    3. Đã sao chép libssh2. dll vào thư mục PHP (wamp\bin\php_vx. x. x).
    4. Thêm extension=php_ssh2. dll dòng trong tệp ini PHP nếu không tồn tại hoặc xóa ‘;’ khỏi ;extension=php_ssh2. dll nếu đã tồn tại (wamp\bin\php_vx. x. x\php. ini).
    5. Đã sao chép libssh2. dll vào thư mục Apache (wamp\bin\apache\Apache_vx. x. x\bin).
    6. Thêm extension=php_ssh2. dll dòng trong tệp ini PHP nếu không tồn tại hoặc xóa ‘;’  khỏi ;extension=php_ssh2. dll nếu đã tồn tại (được khuyến nghị) (wamp\bin\Apache\Apache_vx. x. x\bin\php. ini).
    7. Bắt đầu/Khởi động lại tất cả dịch vụ của Máy chủ WAMP (Máy chủ wamp -> Khởi động lại tất cả dịch vụ).
  3. Khi tôi tìm kiếm điều này trên google, một số bài viết cũng đề xuất các bước/tùy chọn bên dưới, nhưng chúng không hiệu quả với tôi –

    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

    Ssh2 php Windows

    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

    Dung dịch

    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. [liên kết]

    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 chạy mô-đun
    Mô-đun được biên dịch bằng API mô-đun=20200930
    PHP được biên dịch bằng 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

    Ssh2 php Windows

    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 để cài đặt PHP SSH2 trên Windows?

    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. .
    Gỡ bỏ ';' . .
    Khởi động lại Apache

    Làm cách nào để sử dụng SSH2 trong PHP?

    Thiết lập kết nối đến máy chủ SSH từ xa. Sau khi kết nối, máy khách phải xác minh khóa máy chủ của máy chủ bằng dấu vân tay ssh2(), sau đó xác thực bằng mật khẩu hoặc khóa chung

    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