Anna ssh2:lle SOCKSin kautta avattu socket
Neuvottele ensin SOCKS-yhteys ja anna sitten sen kohdesocket ssh2:lle ennen SFTP-alijärjestelmän avaamista.
ssh2 hyväksyy jo yhdistetyn virran sock-vaihtoehtonsa kautta. Anna socksv5:n muodostaa reitti SSH-palvelimelle ja anna sitten kyseinen virta SSH:lle:
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 sovelluksen olemassa oleva SSH-kokoonpano, mukaan lukien sen tili, avain ja hostVerifier-käytäntö. SOCKS-isäntä ja -portti osoittavat välittäjän; sshConfig.host ja port osoittavat lopullisen SSH-palvelun.
Esimerkki käyttää SOCKS-päätepistettä ilman todennusta. Julkisesta internetistä tavoitettavalle SSH-palvelimelle SOCKS5-välityspalvelinluettelo voi tarjota ehdokkaita; jokaisen on silti sallittava SSH-kohde ja -portti. Sen käyttäjänimi/salasana-menetelmää varten käytä socks.auth.UserPassword(proxyUser, proxyPassword)-arvoa auths-kohdassa. Nämä tunnukset eivät korvaa SSH-tiliä.
localDNS false välittää kohdeisäntänimen SOCKS-palvelimelle ja käyttää välityspalvelinpuolen kohderatkaisua. Ilman tätä nimenomaista valintaa socksv5:n dokumentoitu oletus yrittää paikallista ratkaisua.
SOCKS-takaisinkutsu suoritetaan neuvottelun jälkeen. Odota ssh2:n ready-tapahtumaa ennen SFTP:n pyytämistä. Nämä ovat erillisiä onnistuneita vaiheita; eikä TCP-yhteys välityspalvelimeen eikä SOCKS-vastaus todista, että SSH-todennus tai SFTP-alijärjestelmä onnistui.