phpseclib 3 ഒരു തുറന്ന സ്ട്രീം റിസോഴ്സ് സ്വീകരിക്കുന്നു, അതിന്റെ SSH/SFTP കൺസ്ട്രക്ടർ സാധാരണയായി ഹോസ്റ്റ്നാമിനെ സ്വീകരിക്കുന്നിടത്ത്. പ്രോക്സിയിലൂടെ കടന്നുപോകുന്ന ഒരു കണക്ഷനുള്ള പൊതു കൈമാറ്റ പോയിന്റാണിത്.

ആദ്യം, കണക്ടർ യഥാർത്ഥ SFTP സെർവറിലേക്കും അതിന്റെ പോർട്ടിലേക്കും HTTP CONNECT അല്ലെങ്കിൽ SOCKS ടണൽ സ്ഥാപിക്കുന്നു. തുടർന്ന് സ്ഥാപിത സ്ട്രീം 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 പ്രവർത്തനങ്ങൾ ഉപയോഗിക്കാം. കൺസ്ട്രക്ടർ ഇന്റർഫേസ് ആന്തരിക സോക്കറ്റ് ഫീൽഡുകൾ മാറ്റിസ്ഥാപിക്കുക എന്ന ജോലിയുള്ള ആപ്ലിക്കേഷൻ ഉപവർഗ്ഗം ഒഴിവാക്കുന്നു.

അനുബന്ധ ലേഖനങ്ങൾ