完成した CONNECT ソケットを ssh2-sftp-client に渡す
プロキシのヘッダー後にすでにバッファーされている SSH の挨拶を保持し、宛先の通常の SSH オプションで sock を使います。
import SftpClient from 'ssh2-sftp-client';
const client = new SftpClient();
await client.connect({
...sshOptions,
sock: tunnelSocket,
});既存の宛先ホスト、ポート、アカウント、ホストキーポリシーを sshOptions に渡します。ソケットはすでに受け入れ済みの CONNECT トンネルを通ってその宛先へ向かっている必要があり、プロキシのリスナーだけでは不十分です。
ストリームを渡す前にヘルパーを確認します。407 などの失敗応答は拒否し、セットアップの期限を維持し、拒否したソケットを閉じます。Node の HTTP connect イベントには、ヘッダー後にすでに読み取られた head バイトが含まれます。空でないバッファーを適切なストリーム引き渡しで保持してください。たとえば socket.unshift(head) です。これには SSH の挨拶が入っている場合があります。
ソケットを速やかに渡し、完了した SFTP の処理を await client.end() で閉じます。別の場所の HTTP Agent はこの SSH トランスポートを作らず、CONNECT のアカウントは SSH のアカウントとは別です。