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 সাবসিস্টেম সফল হয়েছে বলে প্রমাণ করে না।