SOCKS üzerinden açılan soketi ssh2'ye verin
Önce SOCKS bağlantısını müzakere edin, ardından SFTP alt sistemini açmadan önce hedef soketini ssh2'ye geçirin.
ssh2, sock seçeneği aracılığıyla zaten bağlı bir akışı kabul eder. socksv5'in SSH sunucusuna giden yolu kurmasına izin verin, ardından bu akışı SSH'ye 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, uygulamanın mevcut SSH yapılandırmasıdır; hesabını, anahtarını ve hostVerifier ilkesini içerir. SOCKS ana bilgisayarı ve bağlantı noktası aracıyı belirtir; sshConfig.host ve port ise son SSH hizmetini belirtir.
Örnek, kimlik doğrulaması olmayan bir SOCKS uç noktası kullanır. Genel internetten erişilebilen bir SSH sunucusu için SOCKS5 vekil sunucu listesi adaylar sağlayabilir; her biri yine de SSH hedefine ve bağlantı noktasına izin vermelidir. Kullanıcı adı/parola yöntemi için auths içinde socks.auth.UserPassword(proxyUser, proxyPassword) kullanın. Bu kimlik bilgileri SSH hesabının yerini almaz.
localDNS false, hedef ana bilgisayar adını SOCKS sunucusuna iletir ve vekil tarafındaki hedef çözümlemesini kullanır. Bu açık seçim olmadan socksv5'in belgelenmiş varsayılanı yerel çözümlemeyi dener.
SOCKS geri çağrısı müzakerenin ardından çalışır. SFTP istemeden önce ssh2'nin ready olayını bekleyin. Bunlar ayrı başarılı aşamalardır; ne vekile TCP bağlantısı ne de bir SOCKS yanıtı SSH kimlik doğrulamasının veya SFTP alt sisteminin başarılı olduğunu kanıtlar.