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 のアカウントとは別です。

関連記事