ssh2 өзүнүн sock параметри аркылуу мурунтан туташкан агымды кабыл алат. socksv5 SSH серверине маршрут түзсүн, анан ошол агымды 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 — колдонмонун учурдагы SSH конфигурациясы, анын ичинде аккаунт, ачкыч жана hostVerifier саясаты. SOCKS хосту жана порту ортомчуну көрсөтөт; sshConfig.host жана port акыркы SSH кызматын көрсөтөт.

Мисал аутентификациясыз SOCKS акыркы чекитин колдонот. Коомдук интернеттен жетүүгө болгон SSH сервери үчүн SOCKS5 проксилердин тизмеси талапкерлерди бере алат; алардын ар бири SSH багытына жана портуна уруксат бериши керек. Анын колдонуучу аты/сырсөз ыкмасы үчүн auths ичинде socks.auth.UserPassword(proxyUser, proxyPassword) колдонуңуз. Бул маалыматтар SSH аккаунтун алмаштырбайт.

localDNS false багыт хост атын SOCKS серверине өткөрүп, прокси тараптагы багытты чечүүнү колдонот. Бул ачык тандоо болбосо, socksv5 документтештирилген демейки жергиликтүү чечүүнү аракет кылат.

SOCKS кайтарым чакыруусу сүйлөшүүлөрдөн кийин иштейт. SFTP сурардан мурун ssh2нин ready окуясын күтүңүз. Бул өзүнчө ийгиликтүү этаптар; проксиге TCP байланышы да, SOCKS жообу да SSH аутентификациясы же SFTP ички тутуму ийгиликтүү болгонун далилдебейт.

Тектеш макалалар