Подайте на ssh2 сокета, отворен през SOCKS
Първо договорете SOCKS връзката, после предайте сокета на дестинацията на ssh2, преди да отворите подсистемата SFTP.
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 са успели.