Предајте ssh2 утичницу отворену кроз SOCKS
Прво преговарајте SOCKS везу, затим проследите њену одредишну утичницу ssh2 пре отварања SFTP подсистема.
ssh2 прихвата већ повезан ток кроз своју опцију sock. Нека socksv5 успостави пут до SSH сервера, а затим предајте тај ток 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 је постојећа SSH конфигурација апликације, укључујући њен рачун, кључ и политику hostVerifier. SOCKS хост и порт означавају посредника; sshConfig.host и port означавају коначну SSH услугу.
Пример користи SOCKS одредиште без аутентификације. За SSH сервер доступан са јавног интернета, листа SOCKS5 проксија може понудити кандидате; сваки још мора да дозволи SSH одредиште и порт. За његов метод корисничко име/лозинка користите socks.auth.UserPassword(proxyUser, proxyPassword) у auths. Ти подаци не замењују SSH рачун.
localDNS false прослеђује име хоста одредишта SOCKS серверу, користећи разрешавање одредишта на страни проксија. Без тог изричитог избора документовани подразумевани поступак socksv5 покушава локално разрешавање.
SOCKS повратни позив извршава се након преговарања. Сачекајте ssh2 догађај ready пре захтева за SFTP. То су одвојене успешне фазе; ни TCP веза према проксију ни SOCKS одговор не доказују да су SSH аутентификација или SFTP подсистем успели.