phpseclib 3 приема отворен ресурс за поток там, където неговият конструктор SSH/SFTP иначе би получил име на хост. Това е публичната точка за предаване на връзка, която вече се пренася през прокси.

Първо конекторът установява тунел HTTP CONNECT или SOCKS към действителния SFTP сървър и неговия порт. След това предайте установения поток на SFTP:

use phpseclib3\Net\SFTP;

$sftp = new SFTP($tunnel);

$actualHostKey = $sftp->getServerPublicHostKey();
if ($actualHostKey === false
    || !hash_equals($expectedHostKey, $actualHostKey)) {
    throw new RuntimeException('Unexpected SFTP server key');
}

if (!$sftp->login($sftpUser, $sftpCredential)) {
    throw new RuntimeException('SFTP login failed');
}

$tunnel е вече свързан поток, а не URL на прокси. $expectedHostKey е низът с доверен публичен ключ на сървъра, получен чрез процеса на осигуряване на приложението, във формата, който phpseclib връща. Данните за вход могат да бъдат поддържаната парола или зареден обект на ключ, избран от приложението.

Определете какво връща конекторът

Потокът вече трябва да води до SFTP сървъра. За HTTP CONNECT това означава, че проксито е приело дестинацията и пълните заглавки на отговора на проксито са изразходвани. За SOCKS съответните преговори трябва да са завършили успешно. Всички SSH байтове, вече прочетени отвъд тази граница, трябва да останат достъпни за SSH реализацията.

В този момент phpseclib извършва SSH обмена и стартира SFTP върху същия поток. Приложението може да използва обичайните си SFTP операции. Интерфейсът на конструктора избягва подклас на приложението, чиято задача би била да замени вътрешни полета на сокета.

Подобни статии