Entrega a ssh2 o socket aberto por SOCKS
Negocia primeiro a conexión SOCKS e despois pasa o seu socket de destino a ssh2 antes de abrir o subsistema SFTP.
ssh2 acepta un fluxo xa conectado mediante a súa opción sock. Deixa que socksv5 estableza a ruta ata o servidor SSH e despois entrega ese fluxo a 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 é a configuración SSH existente da aplicación, incluíndo a súa conta, a súa clave e a súa política hostVerifier. O host e o porto SOCKS identifican o intermediario; sshConfig.host e port identifican o servizo SSH final.
O exemplo usa un punto de conexión SOCKS sen autenticación. Para un servidor SSH accesible desde Internet, a lista de proxies SOCKS5 pode fornecer candidatos; cada un debe seguir permitindo o destino e o porto SSH. Para o seu método de usuario/contrasinal, usa socks.auth.UserPassword(proxyUser, proxyPassword) en auths. Esas credenciais non substitúen a conta SSH.
localDNS false pasa o nome de host de destino ao servidor SOCKS, usando a resolución de destino no lado do proxy. Sen esa elección explícita, o valor predeterminado documentado de socksv5 tenta a resolución local.
A chamada de retorno SOCKS execútase despois da negociación. Espera o evento ready de ssh2 antes de solicitar SFTP. Son etapas correctas separadas; nin unha conexión TCP ao proxy nin unha resposta SOCKS demostran que a autenticación SSH ou o subsistema SFTP tivesen éxito.