ssh2 přijímá již připojený proud pomocí volby sock. Nechte socksv5 vytvořit trasu k serveru SSH a poté tento proud předejte 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 stávající konfigurace SSH aplikace včetně účtu, klíče a zásady hostVerifier. Hostitel a port SOCKS označují prostředníka; sshConfig.host a port označují konečnou službu SSH.

Příklad používá koncový bod SOCKS bez ověřování. Pro server SSH dostupný z veřejného internetu může seznam proxy SOCKS5 poskytnout kandidáty; každý z nich však musí povolit cílový hostitel a port SSH. Pro metodu uživatelské jméno/heslo použijte socks.auth.UserPassword(proxyUser, proxyPassword) v auths. Tyto údaje nenahrazují účet SSH.

localDNS false předává název cílového hostitele serveru SOCKS a používá překlad cíle na straně proxy. Bez této explicitní volby dokumentované výchozí nastavení socksv5 zkouší místní překlad.

Zpětné volání SOCKS se spouští po vyjednání. Před požadavkem na SFTP počkejte na událost ready aplikace ssh2. Jde o samostatné úspěšné fáze; ani TCP spojení s proxy, ani odpověď SOCKS neprokazují, že ověření SSH nebo subsystém SFTP uspěly.

Související články