Rhowch y soced a agorwyd drwy SOCKS i ssh2
Cytunwch ar y cysylltiad SOCKS yn gyntaf, yna trosglwyddwch ei soced cyrchfan i ssh2 cyn agor yr is-system SFTP.
Mae ssh2 yn derbyn ffrwd sydd eisoes wedi cysylltu drwy ei opsiwn sock. Gadewch i socksv5 sefydlu'r llwybr i'r gweinydd SSH, yna rhowch y ffrwd honno i 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 yw ffurfweddiad SSH presennol y rhaglen, gan gynnwys ei chyfrif, ei allwedd a'i pholisi hostVerifier. Mae gwesteiwr a phorth SOCKS yn dynodi'r cyfryngwr; mae sshConfig.host a port yn dynodi'r gwasanaeth SSH terfynol.
Mae'r enghraifft yn defnyddio pwynt cyrch SOCKS heb ddilysu. Ar gyfer gweinydd SSH y gellir ei gyrraedd o'r rhyngrwyd cyhoeddus, gall y rhestr dirprwy SOCKS5 ddarparu ymgeiswyr; mae angen i bob un ohonynt ganiatáu cyrchfan a phorth SSH o hyd. Ar gyfer ei ddull enw defnyddiwr/cyfrinair, defnyddiwch socks.auth.UserPassword(proxyUser, proxyPassword) yn auths. Nid yw'r credlynnau hynny yn disodli'r cyfrif SSH.
Mae localDNS false yn trosglwyddo enw gwesteiwr y gyrchfan i'r gweinydd SOCKS, gan ddefnyddio datrysiad cyrchfan ar ochr y dirprwy. Heb y dewis penodol hwnnw, mae rhagosodiad dogfennedig socksv5 yn ceisio datrysiad lleol.
Mae galwad yn ôl SOCKS yn rhedeg ar ôl y trafodaethau. Arhoswch am ddigwyddiad ready ssh2 cyn gofyn am SFTP. Mae'r rhain yn gamau llwyddiannus ar wahân; nid yw cysylltiad TCP i'r dirprwy na ateb SOCKS yn profi bod dilysu SSH na'r is-system SFTP wedi llwyddo.