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 问候。

尽快移交套接字,然后用 await client.end() 关闭已完成的 SFTP 任务。别处的 HTTP Agent 不会创建这条 SSH 传输,CONNECT 账号与 SSH 账号也是分开的。

相关文章