Odovzdajte ssh2 soket otvorený cez SOCKS
Najprv dohodnite SOCKS pripojenie, potom odovzdajte jeho cieľový soket ssh2 pred otvorením subsystému SFTP.
ssh2 prijíma už pripojený tok cez svoju voľbu sock. Nechajte socksv5 vytvoriť trasu k serveru SSH a potom tento tok odovzdajte 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 je existujúca konfigurácia SSH aplikácie vrátane účtu, kľúča a pravidla hostVerifier. Hostiteľ a port SOCKS označujú prostredníka; sshConfig.host a port označujú konečnú službu SSH.
Príklad používa koncový bod SOCKS bez overovania. Pre server SSH dostupný z verejného internetu môže zoznam proxy SOCKS5 poskytnúť kandidátov; každý z nich však musí povoliť cieľ a port SSH. Pri metóde používateľské meno/heslo použite socks.auth.UserPassword(proxyUser, proxyPassword) v auths. Tieto údaje nenahrádzajú účet SSH.
localDNS false odovzdá názov cieľového hostiteľa serveru SOCKS a použije preklad cieľa na strane proxy. Bez tejto výslovnej voľby dokumentované predvolené nastavenie socksv5 skúša miestny preklad.
Spätné volanie SOCKS sa spúšťa po dohodnutí. Pred žiadosťou o SFTP počkajte na udalosť ready aplikácie ssh2. Ide o samostatné úspešné fázy; ani TCP spojenie s proxy, ani odpoveď SOCKS nepreukazujú, že overenie SSH alebo subsystém SFTP uspeli.