ມອບ socket ທີ່ເປີດຜ່ານ SOCKS ໃຫ້ ssh2
ຈັດການເຊື່ອມຕໍ່ SOCKS ກ່ອນ ແລ້ວຈຶ່ງສົ່ງ socket ປາຍທາງຂອງມັນໃຫ້ ssh2 ກ່ອນເປີດລະບົບຍ່ອຍ SFTP.
ssh2 ຮັບ stream ທີ່ເຊື່ອມຕໍ່ແລ້ວຜ່ານຕົວເລືອກ sock. ໃຫ້ socksv5 ສ້າງເສັ້ນທາງໄປຫາເຊີບເວີ SSH ແລ້ວຈຶ່ງສົ່ງ stream ນັ້ນໃຫ້ 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. ສຳລັບວິທີຊື່ຜູ້ໃຊ້/ລະຫັດຜ່ານ ໃຫ້ໃຊ້ socks.auth.UserPassword(proxyUser, proxyPassword) ໃນ auths. ຂໍ້ມູນເຫຼົ່ານັ້ນບໍ່ໄດ້ແທນບັນຊີ SSH.
localDNS false ສົ່ງຊື່ໂຮສປາຍທາງໄປຫາເຊີບເວີ SOCKS ໂດຍໃຊ້ການແກ້ໄຂປາຍທາງຝັ່ງພຣັອກຊີ. ຖ້າບໍ່ມີການເລືອກທີ່ຊັດເຈນນີ້ ຄ່າເລີ່ມຕົ້ນທີ່ເອກະສານຂອງ socksv5 ຈະລອງແກ້ໄຂໃນເຄື່ອງ.
callback ຂອງ SOCKS ເຮັດວຽກຫຼັງການຈັດການ. ລໍຖ້າເຫດການ ready ຂອງ ssh2 ກ່ອນຂໍ SFTP. ເຫຼົ່ານີ້ແມ່ນຂັ້ນຕອນທີ່ສຳເລັດແຍກກັນ; ທັງການເຊື່ອມຕໍ່ TCP ຫາພຣັອກຊີ ແລະຄຳຕອບ SOCKS ບໍ່ໄດ້ພິສູດວ່າການພິສູດຕົວຕົນ SSH ຫຼືລະບົບຍ່ອຍ SFTP ສຳເລັດ.