Serahkan ke ssh2 soket yang dibuka melalui SOCKS
Rundingkan koneksi SOCKS terlebih dahulu, lalu serahkan soket tujuannya ke ssh2 sebelum membuka subsistem SFTP.
ssh2 menerima aliran yang sudah terhubung melalui opsi sock-nya. Biarkan socksv5 membangun rute ke server SSH, lalu serahkan aliran itu ke 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 adalah konfigurasi SSH yang sudah ada pada aplikasi, termasuk akun, kunci, dan kebijakan hostVerifier-nya. Host dan port SOCKS menandai perantara; sshConfig.host dan port menandai layanan SSH akhir.
Contoh ini memakai titik akhir SOCKS tanpa autentikasi. Untuk server SSH yang dapat dijangkau dari internet publik, daftar proxy SOCKS5 dapat menyediakan kandidat; masing-masing tetap harus mengizinkan tujuan dan port SSH. Untuk metode nama pengguna/kata sandi, gunakan socks.auth.UserPassword(proxyUser, proxyPassword) di auths. Kredensial itu tidak menggantikan akun SSH.
localDNS false meneruskan nama host tujuan ke server SOCKS, memakai resolusi tujuan di sisi proxy. Tanpa pilihan eksplisit itu, default terdokumentasi socksv5 mencoba resolusi lokal.
Callback SOCKS berjalan setelah perundingan. Tunggu peristiwa ready dari ssh2 sebelum meminta SFTP. Ini adalah tahap berhasil yang terpisah; baik koneksi TCP ke proxy maupun balasan SOCKS tidak membuktikan bahwa autentikasi SSH atau subsistem SFTP berhasil.