Add át az ssh2-nek a SOCKS-on keresztül megnyitott socketet
Először egyeztesse a SOCKS-kapcsolatot, majd adja át a cél-socketet az ssh2-nek az SFTP-alrendszer megnyitása előtt.
Az ssh2 a sock opcióján keresztül már csatlakozott adatfolyamot fogad. Hagyja, hogy a socksv5 kialakítsa az útvonalat az SSH-kiszolgálóhoz, majd adja át ezt az adatfolyamot az SSH-nak:
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));
Az sshConfig az alkalmazás meglévő SSH-konfigurációja, beleértve a fiókot, a kulcsot és a hostVerifier-szabályt. A SOCKS-gazdagép és -port a közvetítőt jelöli; az sshConfig.host és a port a végső SSH-szolgáltatást jelöli.
A példa hitelesítés nélküli SOCKS-végpontot használ. A nyilvános internetről elérhető SSH-kiszolgálóhoz a SOCKS5 proxy lista adhat jelölteket; mindegyiknek továbbra is engedélyeznie kell az SSH célt és portot. A felhasználónév/jelszó módszerhez használja a socks.auth.UserPassword(proxyUser, proxyPassword) értéket az auths elemen belül. Ezek a hitelesítő adatok nem helyettesítik az SSH-fiókot.
A localDNS false átadja a cél gazdagépnevét a SOCKS-kiszolgálónak, a proxy oldali célfeloldást használva. E kifejezett választás nélkül a socksv5 dokumentált alapértéke helyi feloldást kísérel meg.
A SOCKS visszahívás az egyeztetés után fut. Az SFTP kérése előtt várja meg az ssh2 ready eseményét. Ezek külön sikeres szakaszok; sem a proxyhoz létesített TCP-kapcsolat, sem a SOCKS-válasz nem bizonyítja, hogy az SSH-hitelesítés vagy az SFTP-alrendszer sikeres volt.