Tumatanggap ang ssh2 ng stream na nakakonekta na sa pamamagitan ng opsyon nitong sock. Hayaang itatag ng socksv5 ang ruta patungo sa server ng SSH, pagkatapos ay ibigay ang stream na iyon sa 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));

Ang sshConfig ay ang umiiral na kompigurasyon ng SSH ng aplikasyon, kasama ang account, key at patakaran nitong hostVerifier. Tinutukoy ng host at port ng SOCKS ang tagapamagitan; tinutukoy ng sshConfig.host at port ang huling serbisyo ng SSH.

Gumagamit ang halimbawa ng endpoint ng SOCKS na walang pagpapatunay. Para sa server ng SSH na maabot mula sa pampublikong internet, ang listahan ng proxy na SOCKS5 ay makapagbibigay ng mga kandidato; kailangan pa ring payagan ng bawat isa ang destinasyon at port ng SSH. Para sa paraan nitong username/password, gamitin ang socks.auth.UserPassword(proxyUser, proxyPassword) sa auths. Hindi pinapalitan ng mga kredensyal na iyon ang account ng SSH.

Ipinapasa ng localDNS false ang hostname ng destinasyon sa server ng SOCKS, gamit ang paglutas ng destinasyon sa panig ng proxy. Kung wala ang malinaw na pagpipiliang iyon, sinusubukan ng nakadokumentong default ng socksv5 ang lokal na paglutas.

Tumatakbo ang callback ng SOCKS pagkatapos ng negosasyon. Hintayin ang ready na pangyayari ng ssh2 bago humiling ng SFTP. Ito ay magkahiwalay na matagumpay na yugto; ni ang koneksyong TCP sa proxy ni ang tugon ng SOCKS ay hindi nagpapatunay na nagtagumpay ang pagpapatunay ng SSH o ang subsystem ng SFTP.

Kaugnay na mga artikulo