Передайте готовый сокет CONNECT в ssh2-sftp-client
Сохраните приветствие SSH, уже буферизованное после заголовков прокси, затем используйте sock с обычными параметрами SSH назначения.
import SftpClient from 'ssh2-sftp-client';
const client = new SftpClient();
await client.connect({
...sshOptions,
sock: tunnelSocket,
});Укажите существующий хост, порт, учётную запись и политику ключа хоста назначения в sshOptions. Сокет уже должен вести через принятый туннель CONNECT к этому назначению, а не только к прослушивателю прокси.
Проверьте помощник перед передачей потока: отклоните 407 или другие неудачные ответы, сохраните сроки настройки и закройте отклонённые сокеты. Событие connect HTTP в Node содержит байты head, уже прочитанные после заголовков; сохраните непустой буфер с подходящей передачей потока, например socket.unshift(head). В нём может быть приветствие SSH.
Передайте сокет сразу же, затем закройте завершённую работу SFTP с помощью await client.end(). HTTP Agent в другом месте не создаёт этот транспорт SSH, а учётная запись CONNECT отделена от учётной записи SSH.