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 उपप्रणाली सफल भयो भनी प्रमाणित गर्दैन।