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 उपप्रणाली यशस्वी झाली हे सिद्ध करत नाही.