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 ਸਬਸਿਸਟਮ ਸਫਲ ਹੋਇਆ।

ਸੰਬੰਧਿਤ ਲੇਖ