Anna ssh2-le SOCKS-iga avatud socket
Kõigepealt kaubelge välja SOCKS-ühendus, seejärel andke selle sihtsocket ssh2-le enne SFTP-alamsüsteemi avamist.
ssh2 võtab vastu juba ühendatud voo oma valiku sock kaudu. Lase socksv5-l luua marsruut SSH-serverini ja anna see voog seejärel SSH-le:
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 on rakenduse olemasolev SSH-konfiguratsioon, sealhulgas konto, võti ja hostVerifieri poliitika. SOCKS-i host ja port tähistavad vahendajat; sshConfig.host ja port tähistavad lõplikku SSH-teenust.
Näide kasutab SOCKS-i lõpp-punkti ilma autentimiseta. Avalikust internetist kättesaadava SSH-serveri jaoks võib SOCKS5-puhverserverite loend pakkuda kandidaate; igaüks peab siiski lubama SSH-sihtkohta ja -porti. Selle kasutajanime/parooli meetodi jaoks kasutage auths-is socks.auth.UserPassword(proxyUser, proxyPassword). Need mandaadid ei asenda SSH-kontot.
localDNS false edastab sihtkoha hostinime SOCKS-serverile, kasutades sihtkoha lahendamist puhverserveri poolel. Ilma selle selge valikuta proovib socksv5 dokumenteeritud vaikeväärtus kohalikku lahendamist.
SOCKS-i tagasikutse töötab pärast läbirääkimisi. Enne SFTP-i taotlemist oodake ssh2 ready-sündmust. Need on eraldi õnnestunud etapid; ei TCP-ühendus puhverserveriga ega SOCKS-i vastus ei tõenda, et SSH-autentimine või SFTP-alamsüsteem õnnestus.