SSH

در جالنو برای اتصال به سرور از طریق پروتکل SSH2 کلاس packages\base\SSH ایجاد شده است. در این کلاس با مقداردهی آدرس دامنه و یا آیپی، پورت، نام کاربری و رمز عبور میتوانید به راحتی به سرور متصل شده و تمامی دستورات خط فرمان را در سرور اجرا کنید.

متدهای زیر برای اتصال به سرور در کلاس SSH تعریف شده‌اند.

متد کاربرد
AuthByPassword(string $username, string $password): bool احرازهویت
execute(string $comment) اجرا دستور
connection() اتصال ایجاد شده را برمیگرداند
getHost(): string گرفتن آدرس دامنه و یا آی پی
getPort(): int گرفتن پورت
getUsername(): string گرفتن نام کاربری
getPassword(): string گرفتن رمز عبور

برقراری ارتباط با سرور

برای برقراری ارتباط با سرور لازم است ابتدا شئ از کلاس SSH ایجاد کنید و آدرس هاست و پورت مربوطه را به آن بدهید. اتصال ایجاد شده در متغیر $connection کلاس ذخیره میشود و با فراخوانی متد connection() میتوانید به آن دسترسی داشته باشید.

اگر آدرس هاست یا پورت وارد شده نادرست باشد استثنا \packages\base\ssh\ConnectionException پرتاب میشود.

متد AuthByPassword عملیات احرازهویت را انجام میدهد. این متد در آرگومان اول نام کاربری و در آرگومان دوم رمزعبور را بصورت رشته میگیرد. خروجی متد در صورتی که احرازهویت تائید شود true و در غیر اینصورت false میباشد.

مثال

<?php 
namespace packages\packagename\processes;

use packages\base\{Process, SSH};

class Main extends Process {

    public function index(): void {
        try {
            $ssh = new SSH("www.example.com", 25143);
            $ssh->AuthByPassword("ali", "123");

        } catch (SSH\ConnectionException $e) { }
    }
}

اجرا دستورات

برای اجرای دستورات متد execute تعریف شده است. ورودی متد دستوری است که قصد اجرای آن را در سرور دارید و به‌صورت رشته میباشد. خروجی متد نتیجه‌ی دستور ارسال شده است.

لازم است قبل از اجرای دستورات، خروجی متد AuthByPassword بررسی شود. اگر خروجی متد AuthByPassword برابر false باشد و متد execute فراخوانی شود Warning دریافت میکنید.

Warning: ssh2_exec(): Connection not authenticated
Warning: ssh2_fetch_stream() expects parameter 
Warning: stream_set_blocking() expects parameter
Warning: stream_get_contents() expects parameter

مثال از کد خطا

<?php 
namespace packages\packagename\processes;

use packages\base\{Process, SSH};

class Main extends Process {

    public function index(): void {
        try {
            $ssh =  new SSH("www.example.com", 25143);
            $ssh->AuthByPassword("ali", "123");
            $response = $ssh->execute("/usr/local/bin/php -i");
            print_r($response);
        } catch (SSH\ConnectionException $e) { }
    }
}

مثالاز کد صحیح

<?php 
namespace packages\packagename\processes;
use packages\base\{Process, SSH};

class Main extends Process {

    public function index(): void {
        try {
            $ssh =  new SSH("www.example.com", 25143);
            $AuthByPassword = $ssh->AuthByPassword("ali", "123");
            if(!$AuthByPassword){
                throw new SSH\ConnectionException();
            }
            $response = $ssh->execute("/usr/local/bin/php -i");
            print_r($response);
        } catch (SSH\ConnectionException $e) { }
    }
}