ssh2 sprejme že povezan tok prek svoje možnosti sock. Pustite, da socksv5 vzpostavi pot do strežnika SSH, nato pa ta tok predajte 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 je obstoječa konfiguracija SSH aplikacije, vključno z računom, ključem in pravilnikom hostVerifier. Gostitelj in vrata SOCKS označujeta posrednika; sshConfig.host in port označujeta končno storitev SSH.

Primer uporablja končno točko SOCKS brez preverjanja pristnosti. Za strežnik SSH, dosegljiv z javnega interneta, lahko seznam posrednikov SOCKS5 ponudi kandidate; vsak mora še vedno dovoliti cilj in vrata SSH. Za metodo z uporabniškim imenom/geslom uporabite socks.auth.UserPassword(proxyUser, proxyPassword) v auths. Te poverilnice ne nadomestijo računa SSH.

localDNS false posreduje ime ciljnega gostitelja strežniku SOCKS in uporabi razreševanje cilja na strani posrednika. Brez te izrecne izbire dokumentirana privzeta nastavitev socksv5 poskusi lokalno razreševanje.

Povratni klic SOCKS se izvede po dogovoru. Pred zahtevo za SFTP počakajte na dogodek ready v ssh2. To so ločene uspešne faze; niti povezava TCP s posrednikom niti odgovor SOCKS ne dokazujeta, da sta preverjanje pristnosti SSH ali podsistem SFTP uspela.

Sorodni članki