Serahkan kepada ssh2 soket yang dibuka melalui SOCKS
Rundingkan sambungan SOCKS dahulu, kemudian serahkan soket destinasinya kepada ssh2 sebelum membuka subsistem SFTP.
ssh2 menerima strim yang sudah bersambung melalui pilihan socknya. Biarkan socksv5 membina laluan ke pelayan SSH, kemudian serahkan strim itu kepada 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 ialah konfigurasi SSH sedia ada aplikasi, termasuk akaun, kunci dan dasar hostVerifier. Hos dan port SOCKS menandakan perantara; sshConfig.host dan port menandakan perkhidmatan SSH akhir.
Contoh ini menggunakan titik akhir SOCKS tanpa pengesahan. Untuk pelayan SSH yang boleh dicapai dari internet awam, senarai proksi SOCKS5 boleh membekalkan calon; setiap satu masih perlu membenarkan destinasi dan port SSH. Untuk kaedah nama pengguna/kata laluan, gunakan socks.auth.UserPassword(proxyUser, proxyPassword) dalam auths. Kelayakan itu tidak menggantikan akaun SSH.
localDNS false menyerahkan nama hos destinasi kepada pelayan SOCKS, menggunakan penyelesaian destinasi di sebelah proksi. Tanpa pilihan jelas itu, lalai terdokumen socksv5 mencuba penyelesaian setempat.
Callback SOCKS berjalan selepas rundingan. Tunggu peristiwa ready ssh2 sebelum meminta SFTP. Ini adalah peringkat berjaya yang berasingan; sama ada sambungan TCP ke proksi atau balasan SOCKS tidak membuktikan pengesahan SSH atau subsistem SFTP berjaya.