概述
我正在现场在 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)