SOCKS හරහා විවෘත වූ socket එක ssh2 වෙත දෙන්න
මුලින්ම SOCKS සම්බන්ධතාවය සාකච්ඡා කරන්න, පසුව SFTP උපපද්ධතිය විවෘත කිරීමට පෙර එහි ගමනාන්ත socket එක ssh2 වෙත දෙන්න.
ssh2 එහි sock විකල්පය හරහා දැනටමත් සම්බන්ධ වූ stream එකක් පිළිගනී. socksv5 ට SSH සේවාදායකය වෙත මාර්ගය ස්ථාපිත කිරීමට ඉඩ දෙන්න, පසුව එම stream එක 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 host සහ port මැදිහත්කරු හඳුන්වයි; sshConfig.host සහ port අවසාන SSH සේවාව හඳුන්වයි.
උදාහරණය සත්යාපනයකින් තොර SOCKS අන්ත ලක්ෂ්යයක් භාවිත කරයි. පොදු අන්තර්ජාලයෙන් ළඟා විය හැකි SSH සේවාදායකයක් සඳහා SOCKS5 ප්රොක්සි ලැයිස්තුව අපේක්ෂකයන් සපයයි; සෑම එකක්ම තවමත් SSH ගමනාන්තය සහ port එකට අවසර දිය යුතුය. එහි පරිශීලක නාමය/මුරපද ක්රමය සඳහා auths තුළ socks.auth.UserPassword(proxyUser, proxyPassword) භාවිත කරන්න. එම අක්තපත්ර SSH ගිණුම වෙනුවට ප්රතිස්ථාපනය නොකරයි.
localDNS false ගමනාන්ත host නාමය SOCKS සේවාදායකය වෙත යවයි, ප්රොක්සි පැත්තේ ගමනාන්ත විභේදනය භාවිත කරමින්. එම පැහැදිලි තේරීම නොමැතිව socksv5 හි ලේඛනගත පෙරනිමිය දේශීය විභේදනය උත්සාහ කරයි.
SOCKS callback එක සාකච්ඡාවෙන් පසු ක්රියා කරයි. SFTP ඉල්ලීමට පෙර ssh2 හි ready සිදුවීම එනතුරු රැඳී සිටින්න. මේවා වෙන් වූ සාර්ථක අවස්ථා ය; ප්රොක්සියට TCP සම්බන්ධතාවය හෝ SOCKS පිළිතුර හෝ SSH සත්යාපනය හෝ SFTP උපපද්ධතිය සාර්ථක වූ බව ඔප්පු නොකරයි.