Gee ssh2 die sokket wat deur SOCKS oopgemaak is
Onderhandel eers die SOCKS-verbinding en gee dan sy bestemmingsokket aan ssh2 voordat die SFTP-subsisteem oopgemaak word.
ssh2 aanvaar 'n reeds gekoppelde stroom via sy sock-opsie. Laat socksv5 die roete na die SSH-bediener vestig en gee dan daardie stroom aan 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 is die toepassing se bestaande SSH-konfigurasie, insluitend sy rekening, sleutel en hostVerifier-beleid. Die SOCKS-gasheer en -poort dui die tussenganger aan; sshConfig.host en -poort dui die finale SSH-diens aan.
Die voorbeeld gebruik 'n SOCKS-eindpunt sonder verifikasie. Vir 'n SSH-bediener wat van die publieke internet bereikbaar is, kan die SOCKS5-proksielys kandidate verskaf; elkeen moet steeds die SSH-bestemming en -poort toelaat. Vir sy gebruikernaam/wagwoord-metode gebruik socks.auth.UserPassword(proxyUser, proxyPassword) in auths. Daardie geloofsbriewe vervang nie die SSH-rekening nie.
localDNS false stuur die bestemming se gasheernaam na die SOCKS-bediener en gebruik bestemmingoplossing aan die proksykant. Sonder daardie eksplisiete keuse probeer socksv5 se gedokumenteerde verstek plaaslike oplossing.
Die SOCKS-terugroep loop ná onderhandeling. Wag vir ssh2 se ready-gebeurtenis voordat SFTP aangevra word. Dit is afsonderlike suksesvolle fases; nóg 'n TCP-verbinding na die proksi nóg 'n SOCKS-antwoord bewys dat SSH-verifikasie of die SFTP-subsisteem geslaag het.