SOCKS വഴി തുറന്ന സോക്കറ്റ് ssh2-ന് നൽകുക
ആദ്യം SOCKS കണക്ഷൻ ചർച്ച ചെയ്യുക, തുടർന്ന് SFTP സബ്സിസ്റ്റം തുറക്കുന്നതിന് മുൻപ് അതിന്റെ ലക്ഷ്യ സോക്കറ്റ് ssh2-ന് നൽകുക.
ssh2 അതിന്റെ sock ഓപ്ഷനിലൂടെ ഇതിനകം ബന്ധിപ്പിച്ച സ്ട്രീം സ്വീകരിക്കുന്നു. socksv5 SSH സർവറിലേക്കുള്ള വഴി സ്ഥാപിക്കട്ടെ, തുടർന്ന് ആ സ്ട്രീം SSH-ന് നൽകുക:
const socks = require('socksv5');
const { Client } = require('ssh2');
const connection = socks.connect({
host: sshConfig.host,
port: sshConfig.port || 22,
proxyHost: 'proxy.example',
proxyPort: 1080,
localDNS: false,
auths: [socks.auth.None()],
}, socket => {
const ssh = new Client();
ssh.on('error', error => console.error(error.message));
ssh.on('ready', () => {
ssh.sftp((error, sftp) => {
if (error) {
console.error(error.message);
ssh.end();
return;
}
sftp.readdir('.', (error, entries) => {
if (error) console.error(error.message);
else console.log(entries);
ssh.end();
});
});
});
ssh.connect({ ...sshConfig, sock: socket });
});
connection.on('error', error => console.error(error.message));
sshConfig ആപ്ലിക്കേഷന്റെ നിലവിലുള്ള SSH കോൺഫിഗറേഷനാണ്, അതിൽ അക്കൗണ്ട്, കീ, hostVerifier നയം എന്നിവ ഉൾപ്പെടുന്നു. SOCKS ഹോസ്റ്റും പോർട്ടും ഇടനിലക്കാരനെ സൂചിപ്പിക്കുന്നു; sshConfig.host ഉം port ഉം അന്തിമ SSH സേവനത്തെ സൂചിപ്പിക്കുന്നു.
ഉദാഹരണം പ്രാമാണീകരണമില്ലാത്ത SOCKS എൻഡ്പോയിന്റ് ഉപയോഗിക്കുന്നു. പൊതു ഇന്റർനെറ്റിൽ നിന്ന് എത്താവുന്ന SSH സർവറിന് SOCKS5 പ്രോക്സി പട്ടിക സ്ഥാനാർത്ഥികൾ നൽകാം; ഓരോന്നും SSH ലക്ഷ്യവും പോർട്ടും അനുവദിക്കണം. അതിന്റെ ഉപയോക്തൃനാമം/പാസ്വേഡ് രീതിക്ക് auths-ൽ socks.auth.UserPassword(proxyUser, proxyPassword) ഉപയോഗിക്കുക. ആ ക്രെഡൻഷ്യലുകൾ SSH അക്കൗണ്ടിന് പകരമാകുന്നില്ല.
localDNS false ലക്ഷ്യ ഹോസ്റ്റ്നാമം SOCKS സർവറിലേക്ക് അയയ്ക്കുന്നു, പ്രോക്സി വശത്തെ ലക്ഷ്യ റെസൊല്യൂഷൻ ഉപയോഗിച്ച്. ഈ വ്യക്തമായ തിരഞ്ഞെടുപ്പ് ഇല്ലാതെ socksv5-ന്റെ രേഖപ്പെടുത്തിയ സ്ഥിരമൂല്യം പ്രാദേശിക റെസൊല്യൂഷൻ ശ്രമിക്കുന്നു.
SOCKS കോൾബാക്ക് ചർച്ചയ്ക്ക് ശേഷം പ്രവർത്തിക്കുന്നു. SFTP അഭ്യർത്ഥിക്കുന്നതിന് മുൻപ് ssh2-ന്റെ ready ഇവന്റിനായി കാത്തിരിക്കുക. ഇവ വേറിട്ട വിജയഘട്ടങ്ങളാണ്; പ്രോക്സിയിലേക്കുള്ള TCP കണക്ഷനോ SOCKS മറുപടിയോ SSH പ്രാമാണീകരണമോ SFTP സബ്സിസ്റ്റമോ വിജയിച്ചു എന്ന് തെളിയിക്കുന്നില്ല.