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.

Aiheeseen liittyvät artikkelit