Giv ssh2 den socket, der blev åbnet via SOCKS
Forhandl SOCKS-forbindelsen først, og giv derefter dens destinationssocket til ssh2, før SFTP-undersystemet åbnes.
ssh2 accepterer en allerede forbundet stream via sin sock-indstilling. Lad socksv5 etablere ruten til SSH-serveren, og giv derefter den stream til 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 er applikationens eksisterende SSH-konfiguration, inklusive dens konto, nøgle og hostVerifier-politik. SOCKS-værten og -porten angiver mellemleddet; sshConfig.host og port angiver den endelige SSH-tjeneste.
Eksemplet bruger et SOCKS-endpoint uden godkendelse. Til en SSH-server, der kan nås fra det offentlige internet, kan SOCKS5-proxylisten levere kandidater; hver af dem skal stadig tillade SSH-destinationen og -porten. Brug socks.auth.UserPassword(proxyUser, proxyPassword) i auths til dens brugernavn/adgangskode-metode. Disse legitimationsoplysninger erstatter ikke SSH-kontoen.
localDNS false sender destinationsværtens navn til SOCKS-serveren og bruger destinationsopløsning på proxy-siden. Uden dette eksplicitte valg forsøger socksv5's dokumenterede standard lokal opløsning.
SOCKS-callbacken kører efter forhandlingen. Vent på ssh2's ready-begivenhed, før du anmoder om SFTP. Det er separate vellykkede faser; hverken en TCP-forbindelse til proxyen eller et SOCKS-svar beviser, at SSH-godkendelsen eller SFTP-undersystemet lykkedes.