phpseclib 3 SFTP przez ustanowiony strumień proxy
Użyj publicznego konstruktora strumienia phpseclib 3, aby uruchomić SFTP przez ustanowiony tunel HTTP lub SOCKS.
phpseclib 3 akceptuje otwarty zasób strumienia tam, gdzie jego konstruktor SSH/SFTP otrzymałby w przeciwnym razie nazwę hosta. To publiczny punkt przekazania połączenia, które jest już prowadzone przez proxy.
Najpierw łącznik ustanawia tunel HTTP CONNECT lub SOCKS do rzeczywistego serwera SFTP i jego portu. Następnie ustanowiony strumień przekazuje się do 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 to już połączony strumień, a nie adres URL proxy. $expectedHostKey to zaufany ciąg klucza publicznego serwera, uzyskany w procesie przygotowania aplikacji, w formacie zwracanym przez phpseclib. Poświadczenie logowania może być obsługiwanym hasłem lub wczytanym obiektem klucza wybranym przez aplikację.
Zdefiniuj, co zwraca łącznik
Strumień musi już prowadzić do serwera SFTP. W przypadku HTTP CONNECT oznacza to, że proxy zaakceptowało cel i pełne nagłówki odpowiedzi proxy zostały zużyte. W przypadku SOCKS odpowiednie negocjacje muszą zakończyć się powodzeniem. Wszystkie bajty SSH już odczytane poza tą granicą muszą pozostać dostępne dla implementacji SSH.
W tym momencie phpseclib wykonuje wymianę SSH i uruchamia SFTP na tym samym strumieniu. Aplikacja może korzystać ze zwykłych operacji SFTP. Interfejs konstruktora pozwala uniknąć podklasy aplikacji, której zadaniem byłoby zastępowanie wewnętrznych pól gniazda.