Mae phpseclib 3 yn derbyn adnodd ffrwd agored lle byddai ei gonsurydd SSH/SFTP fel arall yn derbyn enw gwesteiwr. Dyma'r pwynt trosglwyddo cyhoeddus ar gyfer cysylltiad sydd eisoes yn cael ei gario trwy ddirprwy.

Yn gyntaf, mae'r cysylltydd yn sefydlu twnnel HTTP CONNECT neu SOCKS i'r gweinydd SFTP gwirioneddol a'i borth. Yna trosglwyddwch y ffrwd sefydledig i 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 yw ffrwd sydd eisoes wedi'i chysylltu, nid URL dirprwy. $expectedHostKey yw llinyn allwedd gyhoeddus ymddiriededig y gweinydd a geir trwy broses ddarparu'r cymhwysiad, yn y fformat a ddychwelir gan phpseclib. Gall yr enw ar gyfer mewngofnodi fod y cyfrinair a gefnogir neu wrthrych allwedd a lwythwyd a ddewisir gan y cymhwysiad.

Diffiniwch beth mae'r cysylltydd yn ei ddychwelyd

Rhaid i'r ffrwd arwain at y gweinydd SFTP yn barod. Ar gyfer HTTP CONNECT, mae hyn yn golygu bod y dirprwy wedi derbyn y gyrchfan a bod penawdau ymateb cyflawn y dirprwy wedi'u bwyta. Ar gyfer SOCKS, rhaid i'r trafodaeth berthnasol fod wedi cwblhau'n llwyddiannus. Rhaid i unrhyw feitiau SSH a ddarllenwyd eisoes y tu hwnt i'r ffin honno aros ar gael i'r gweithrediad SSH.

Ar y pwynt hwnnw mae phpseclib yn gwneud y cyfnewid SSH ac yn cychwyn SFTP dros yr un ffrwd. Gall y cymhwysiad ddefnyddio ei weithrediadau SFTP arferol. Mae rhyngwyneb y consurydd yn osgoi is-ddosbarth cymhwysiad y byddai ei waith yn disodli meysydd soced mewnol.

Erthyglau cysylltiedig