ផ្ដល់ឱ្យ ssh2 នូវសុខៈដែលបើកតាម SOCKS
ចរចាការតភ្ជាប់ SOCKS ជាមុន បន្ទាប់មកផ្ដល់សុខៈគោលដៅរបស់វាទៅ ssh2 មុនពេលបើកប្រព័ន្ធរង SFTP។
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។ សម្រាប់វិធីឈ្មោះអ្នកប្រើ/ពាក្យសម្ងាត់ សូមប្រើ socks.auth.UserPassword(proxyUser, proxyPassword) ក្នុង auths។ ព័ត៌មានសម្គាល់ទាំងនោះមិនជំនួសគណនី SSH ទេ។
localDNS false បញ្ជូនឈ្មោះម៉ាស៊ីនគោលដៅទៅម៉ាស៊ីនមេ SOCKS ដោយប្រើការដោះស្រាយគោលដៅខាងភ្នាក់ងារ។ បើគ្មានជម្រើសច្បាស់លាស់នេះទេ តម្លៃលំនាំដើមដែលបានឯកសាររបស់ socksv5 ព្យាយាមដោះស្រាយក្នុងតំបន់។
callback របស់ SOCKS ដំណើរការបន្ទាប់ពីការចរចា។ រង់ចាំព្រឹត្តិការណ៍ ready របស់ ssh2 មុនពេលស្នើ SFTP។ ទាំងនេះជាដំណាក់កាលជោគជ័យដាច់ដោយឡែក; ទាំងការតភ្ជាប់ TCP ទៅភ្នាក់ងារ និងចម្លើយ SOCKS មិនបញ្ជាក់ថាការផ្ទៀងផ្ទាត់ SSH ឬប្រព័ន្ធរង SFTP ជោគជ័យទេ។