ssh2 prihvaća već povezan tok kroz svoju sock opciju. Neka socksv5 uspostavi put do SSH poslužitelja, a zatim predajte taj tok SSH-u:

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 je postojeća SSH konfiguracija aplikacije, uključujući njezin račun, ključ i pravila hostVerifier. SOCKS host i port označavaju posrednika; sshConfig.host i port označavaju konačnu SSH uslugu.

Primjer rabi SOCKS odredište bez autentifikacije. Za SSH poslužitelj dostupan s javnog interneta, popis SOCKS5 proxyja može ponuditi kandidate; svaki još mora dopuštati SSH odredište i port. Za njegovu metodu korisničkog imena/lozinke rabite socks.auth.UserPassword(proxyUser, proxyPassword) u auths. Ti podaci ne zamjenjuju SSH račun.

localDNS false prosljeđuje ime hosta odredišta SOCKS poslužitelju, rabeći razrješavanje odredišta na strani proxyja. Bez tog izričitog odabira dokumentirani zadani postupak socksv5 pokušava lokalno razrješavanje.

SOCKS povratni poziv izvodi se nakon pregovaranja. Pričekajte ssh2 događaj ready prije zahtjeva za SFTP. To su odvojene uspješne faze; ni TCP veza prema proxyju ni SOCKS odgovor ne dokazuju da su SSH autentifikacija ili SFTP podsustav uspjeli.

Povezani članci