ssh2 akseptearret in al ferbûne stream fia syn sock-opsje. Lit socksv5 de rûte nei de SSH-tsjinner oanlizze en jou dy stream dan oan 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 is de besteande SSH-konfiguraasje fan 'e applikaasje, ynklusyf har akkount, kaai en hostVerifier-belied. De SOCKS-host en -poart wize de tuskenpersoan oan; sshConfig.host en port wize de definitive SSH-tsjinst oan.

It foarbyld brûkt in SOCKS-einpunt sûnder autentikaasje. Foar in SSH-tsjinner dy't fan it iepenbiere internet berikber is, kin de SOCKS5-proxy-list kandidaten leverje; elk moat noch altyd de SSH-bestimming en -poart tastean. Brûk foar syn brûkersnamme/wachtwurdmetoade socks.auth.UserPassword(proxyUser, proxyPassword) yn auths. Dy bewiisstikken ferfange it SSH-akkount net.

localDNS false jout de bestimming-hostnamme oan de SOCKS-tsjinner, mei bestimming-oplossing oan 'e proxykant. Sûnder dy eksplisite kar besiket de dokumintearre standert fan socksv5 lokale oplossing.

De SOCKS-callback rint nei de ûnderhanneling. Wachtsje op 'e ready-barren fan ssh2 foar't SFTP oanfrege wurdt. Dit binne aparte suksesfolle fazen; noch in TCP-ferbining nei de proxy noch in SOCKS-antwurd bewizen dat SSH-autentikaasje of it SFTP-subsysteem slagge is.

Relatearre artikelen