Perduokite ssh2 per SOCKS atidarytą lizdą
Pirmiausia suderėkite SOCKS ryšį, tada perduokite jo paskirties lizdą ssh2 prieš atidarydami SFTP posistemę.
ssh2 priima jau prijungtą srautą per savo parinktį sock. Leiskite socksv5 nustatyti maršrutą į SSH serverį, tada perduokite tą srautą 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 yra esama programos SSH konfigūracija, įskaitant paskyrą, raktą ir hostVerifier taisyklę. SOCKS mazgas ir prievadas nurodo tarpininką; sshConfig.host ir port nurodo galutinę SSH paslaugą.
Pavyzdyje naudojamas SOCKS galinis taškas be autentifikavimo. Jei SSH serveris pasiekiamas iš viešojo interneto, SOCKS5 tarpinių serverių sąrašas gali pasiūlyti kandidatų; kiekvienas jų vis tiek turi leisti SSH paskirties mazgą ir prievadą. Jei naudojamas vartotojo vardo/slaptažodžio metodas, auths dalyje naudokite socks.auth.UserPassword(proxyUser, proxyPassword). Šie prisijungimo duomenys nepakeičia SSH paskyros.
localDNS false perduoda paskirties mazgo vardą SOCKS serveriui ir naudoja paskirties sprendimą tarpinio serverio pusėje. Be šio aiškaus pasirinkimo dokumentuotas socksv5 numatytasis nustatymas bando vietinį sprendimą.
SOCKS atgalinis iškvietimas vykdomas po derybų. Prieš prašydami SFTP palaukite ssh2 ready įvykio. Tai atskiri sėkmingi etapai; nei TCP ryšys su tarpiniu serveriu, nei SOCKS atsakymas neįrodo, kad SSH autentifikavimas ar SFTP posistemė pavyko.