Το 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. Για τη μέθοδο ονόματος χρήστη/κωδικού πρόσβασης, χρησιμοποιήστε το socks.auth.UserPassword(proxyUser, proxyPassword) στο auths. Αυτά τα διαπιστευτήρια δεν αντικαθιστούν τον λογαριασμό SSH.

Το localDNS false περνά το όνομα κεντρικού υπολογιστή προορισμού στον διακομιστή SOCKS, χρησιμοποιώντας επίλυση προορισμού στην πλευρά του μεσολαβητή. Χωρίς αυτή τη ρητή επιλογή, η τεκμηριωμένη προεπιλογή του socksv5 δοκιμάζει τοπική επίλυση.

Η επανάκληση SOCKS εκτελείται μετά τη διαπραγμάτευση. Περιμένετε το συμβάν ready του ssh2 πριν ζητήσετε SFTP. Πρόκειται για ξεχωριστά επιτυχημένα στάδια· ούτε μια σύνδεση TCP προς τον μεσολαβητή ούτε μια απάντηση SOCKS αποδεικνύουν ότι ο έλεγχος ταυτότητας SSH ή το υποσύστημα SFTP πέτυχαν.

Σχετικά άρθρα