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 सबसिस्टम सफल हुआ।

संबंधित लेख