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 ఉపవ్యవస్థ విజయవంతమైందని నిరూపించవు.