SOCKS-оор нээгдсэн сокетыг ssh2-д дамжуул
Эхлээд SOCKS холболтыг тохиролцож, дараа нь SFTP дэд системийг нээхийн өмнө түүний очих сокетыг ssh2-д дамжуулна.
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 очих газар ба портыг зөвшөөрөх шаардлагатай хэвээр. Хэрэглэгчийн нэр/нууц үг аргын хувьд auths дотор socks.auth.UserPassword(proxyUser, proxyPassword) ашиглана. Эдгээр итгэмжлэл нь SSH бүртгэлийг орлохгүй.
localDNS false нь очих хостын нэрийг SOCKS серверт дамжуулж, прокси талын очих газрын шийдвэрлэлт-ийг ашиглана. Энэ тодорхой сонголтгүй бол socksv5-ийн баримтлагдсан өгөгдмөл нь локал шийдвэрлэлтийг оролдоно.
SOCKS-ийн callback нь тохиролцооны дараа ажиллана. SFTP хүсэхээс өмнө ssh2-ийн ready үйл явдлыг хүлээ. Эдгээр нь тусдаа амжилттай үе шатууд; прокси руу хийх TCP холболт ч, SOCKS хариу ч SSH баталгаажуулалт эсвэл SFTP дэд систем амжилттай болсныг нотлохгүй.