SOCKS vasitəsilə açılmış soketi ssh2-yə verin
Əvvəlcə SOCKS bağlantısını razılaşdırın, sonra SFTP alt sistemini açmadan əvvəl onun təyinat soketini ssh2-yə ötürün.
ssh2 artıq qoşulmuş axını sock seçimi ilə qəbul edir. Qoy socksv5 SSH serverinə marşrutu qursun, sonra həmin axını SSH-ə verin:
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 tətbiqin mövcud SSH konfiqurasiyasıdır, o cümlədən hesabı, açarı və hostVerifier siyasəti. SOCKS host və portu vasitəçini göstərir; sshConfig.host və port son SSH xidmətini göstərir.
Nümunə autentifikasiyasız SOCKS son nöqtəsindən istifadə edir. İctimai internetdən əlçatan SSH serveri üçün SOCKS5 proksi siyahısı namizədlər verə bilər; hər biri yenə də SSH təyinatına və portuna icazə verməlidir. Onun istifadəçi adı/parol üsulu üçün auths daxilində socks.auth.UserPassword(proxyUser, proxyPassword) istifadə edin. Bu etimadnamələr SSH hesabını əvəz etmir.
localDNS false təyinat host adını SOCKS serverinə ötürür və proksi tərəfində təyinat həllini istifadə edir. Bu açıq seçim olmadan socksv5-in sənədləşdirilmiş standartı yerli həlli sınayır.
SOCKS callback razılaşmadan sonra işləyir. SFTP tələb etməzdən əvvəl ssh2-nin ready hadisəsini gözləyin. Bunlar ayrı-ayrı uğurlu mərhələlərdir; nə proxy-yə TCP bağlantısı, nə də SOCKS cavabı SSH autentifikasiyasının və ya SFTP alt sisteminin uğurlu olduğunu sübut etmir.