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 ಕಾಲ್ಬ್ಯಾಕ್ ಮಾತುಕತೆಯ ನಂತರ ಚಲಿಸುತ್ತದೆ. SFTP ಕೇಳುವ ಮೊದಲು ssh2 ನ ready ಈವೆಂಟ್ಗಾಗಿ ಕಾಯಿರಿ. ಇವು ಪ್ರತ್ಯೇಕ ಯಶಸ್ವಿ ಹಂತಗಳು; ಪ್ರಾಕ್ಸಿಗೆ TCP ಸಂಪರ್ಕ ಅಥವಾ SOCKS ಉತ್ತರ ಎರಡೂ SSH ದೃಢೀಕರಣ ಅಥವಾ SFTP ಉಪವ್ಯವಸ್ಥೆ ಯಶಸ್ವಿಯಾಯಿತು ಎಂದು ಸಾಬೀತುಪಡಿಸುವುದಿಲ್ಲ.