ssh2 godtar en allerede tilkoblet strøm via sock-alternativet. La socksv5 etablere ruten til SSH-serveren, og gi deretter den strømmen til 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 er applikasjonens eksisterende SSH-konfigurasjon, inkludert kontoen, nøkkelen og hostVerifier-policyen. SOCKS-verten og -porten angir mellomleddet; sshConfig.host og port angir den endelige SSH-tjenesten.

Eksempelet bruker et SOCKS-endepunkt uten autentisering. For en SSH-server som er tilgjengelig fra det åpne internettet, kan SOCKS5-proxylisten skaffe kandidater; hver av dem må fortsatt tillate SSH-destinasjonen og -porten. Bruk socks.auth.UserPassword(proxyUser, proxyPassword) i auths for brukernavn/passord-metoden. Disse legitimasjonene erstatter ikke SSH-kontoen.

localDNS false sender destinasjonens vertsnavn til SOCKS-serveren og bruker destinasjonsoppslag på proxy-siden. Uten dette eksplisitte valget prøver socksv5 sin dokumenterte standard lokalt oppslag.

SOCKS-callbacken kjører etter forhandlingen. Vent på ssh2s ready-hendelse før du ber om SFTP. Dette er separate vellykkede faser; verken en TCP-tilkobling til proxyen eller et SOCKS-svar beviser at SSH-autentiseringen eller SFTP-undersystemet lyktes.

Relaterte artikler