Gefðu ssh2 sokkinn sem opnaður var í gegnum SOCKS
Semjið fyrst um SOCKS-tenginguna og afhendið ssh2 þá áfangasokkinn áður en SFTP-undirkerfið er opnað.
ssh2 tekur við þegar tengdum straumi í gegnum sock-valkostinn sinn. Láttu socksv5 koma leiðinni til SSH-þjónsins á fót og afhentu þann straum svo 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 er fyrirliggjandi SSH-stilling forritsins, þar á meðal reikningurinn, lykillinn og hostVerifier-stefnan. SOCKS-hýsillinn og -portinn benda á milliliðinn; sshConfig.host og port benda á endanlega SSH-þjónustuna.
Dæmið notar SOCKS-endapunkt án auðkenningar. Fyrir SSH-þjón sem næst frá opinberu internetinu getur SOCKS5-proxylistinn boðið frambjóðendur; hver þeirra þarf samt að leyfa SSH-áfangann og portinn. Fyrir notandanafn/lykilorðsaðferð hans skal nota socks.auth.UserPassword(proxyUser, proxyPassword) í auths. Þessi skilríki koma ekki í stað SSH-reikningsins.
localDNS false sendir hýsilnafn áfangans til SOCKS-þjónsins og notar áfangaupplausn á proxy-hliðinni. Án þess skýra vals reynir skjalfest sjálfgefið gildi socksv5 staðbundna upplausn.
SOCKS-afturkallið keyrir eftir samningaviðræðurnar. Bíðið eftir ready-atburðinum í ssh2 áður en beðið er um SFTP. Þetta eru aðskilin farsæl þrep; hvorki TCP-tenging við proxyið né SOCKS-svar sannar að SSH-auðkenningin eða SFTP-undirkerfið hafi tekist.