小编Sec*_*hel的帖子

SSH 文件传输在 ~700KB 后挂起

概述

我正在现场在 Windows 7 机器上编写 SFTP 文件传输脚本。当我传输大于 1 兆字节左右的 zip 文件时,传输(和 SSH)在大约 700KB 后意外停止。SSH 进程似乎挂起,但它并没有开始大量消耗 CPU 或内存,Windows 也没有说它已停止响应。服务器最终放弃并超时,但客户端永远不会返回(尽管设置了 ServerAliveCountMax 和 ServerAliveInterval)。服务器日志显示传输开始,然后超时并在很长时间后断开连接。

细节

背靠背重新运行脚本,每次挂起前传输相同数量的字节。走开再回来,然后再次运行脚本,字节数会相差几十千字节。

命令行 sftp.exe 客户端使用默认选项正常工作;那些较大的 zip 文件传输成功。我无法测试 scp.exe,因为 SSH 用户帐户没有外壳访问权限。我相信问题在操作系统擦除和从 XP 到 7 的重新映像中仍然存在,所以我怀疑是网络问题,但我无法理解什么样的问题会导致这种行为。

我正在使用 Perl 和 Net::SFTP::Foreign 模块编写脚本。以下是从我的测试用例脚本中提取的相关代码(下面附有 SSH 输出日志):

 my %connectOpts = ( 
  user     => $username
  ,timeout => $timeout
  ,warn    => sub {}
  ,more    => [ "-o PreferredAuthentications=publickey",
               "-o ServerAliveCountMax=6",
               "-o ServerAliveInterval=" . int($timeout/6),
               "-vvvv" ]
  );

my $sftp = Net::SFTP::Foreign::Compat->new( $host, %connectOpts );

foreach my $local_file …
Run Code Online (Sandbox Code Playgroud)

ssh file-transfer sftp perl

5
推荐指数
1
解决办法
5678
查看次数

标签 统计

file-transfer ×1

perl ×1

sftp ×1

ssh ×1