ssh2 prihvata već povezan tok kroz svoju sock opciju. Neka socksv5 uspostavi rutu do SSH servera, 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 njen račun, ključ i politiku hostVerifier. SOCKS host i port označavaju posrednika; sshConfig.host i port označavaju konačnu SSH uslugu.

Primjer koristi SOCKS odredište bez autentifikacije. Za SSH server dostupan s javnog interneta, lista SOCKS5 proxyja može ponuditi kandidate; svaki još mora dopuštati SSH odredište i port. Za njegov metod korisničko ime/lozinka koristite socks.auth.UserPassword(proxyUser, proxyPassword) u auths. Ti podaci ne zamjenjuju SSH račun.

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

SOCKS povratni poziv izvršava se nakon pregovaranja. Sač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 podsistem uspjeli.

Povezani članci