Передайте ssh2 сокет, відкритий через SOCKS
Спершу узгодьте з'єднання SOCKS, потім передайте його сокет призначення в ssh2 перед відкриттям підсистеми SFTP.
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. Для методу з іменем користувача та паролем використовуйте socks.auth.UserPassword(proxyUser, proxyPassword) у auths. Ці дані не замінюють обліковий запис SSH.
localDNS false передає ім'я хоста призначення серверу SOCKS, використовуючи розв'язання призначення на боці проксі. Без цього явного вибору документоване типове значення socksv5 намагається виконати локальне розв'язання.
Зворотний виклик SOCKS виконується після узгодження. Дочекайтеся події ready у ssh2, перш ніж запитувати SFTP. Це окремі успішні етапи; ні TCP-з'єднання з проксі, ні відповідь SOCKS не доводять, що автентифікація SSH або підсистема SFTP завершилися успішно.