Renci SSH.Net SFTP连接断断续续
本文关键字:连接 断断续续 SFTP Net SSH Renci | 更新日期: 2023-09-27 18:16:47
我从ASP上传文件有问题。. NET服务器到我们的CDN (Akamai)使用Renci SSH SFTP。在发行之前,我们一直使用FTP上传媒体,任何超过50MB的内容都会出现502个坏网关问题。因为我们想要更新到SFTP以保证安全性,所以我们将FTP代码换成了SFTP,看看问题是否仍然存在。在我们的开发和QA环境中,这似乎可以解决这个问题,但不可否认的是,它的流量比我们的prod服务器要低得多。一旦进入生产阶段,我们有大约3000次上传,其中30%的上传失败,出现以下错误,源自Renci SSH。净
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
有趣的是,这只发生在代码被ASP.NET执行的时候。我制作了一个控制台应用程序,它调用Services.dll,提供了媒体文件的路径,并提供了一个适当大小的测试媒体列表,大小从800 KB到187 MB不等。当作为控制台应用程序在服务器上运行时,没有抛出一个错误。因此,我认为问题是在ASP的某个地方。. NET、IIS或一些我不知道的服务器设置。
我们的防火墙设置为允许通过端口22与Akamai进行ssh通信,我让我的团队对每个负载平衡服务器进行验证。由于控制台应用程序运行良好,我不认为这是问题所在。但值得一提的是,我看了
用于上传媒体项的管理面板位于aspx页面上,我将其称为"upload"。Aspx"。在web配置中,我们延长了上传的执行超时时间。
<location path="path/to/upload.aspx">
<system.web>
<httpRuntime maxRequestLength="204800" executionTimeout="2700" />
</system.web>
</location>
下面是连接
的代码using(var client = new SftpClient(GetConnectionInfo()))
{
client.ConnectionInfo.Timeout = TimeSpan.FromMinutes(5);
//This is the line that is hit before the error.
//It attempts to connect for about 20 seconds and throws an error.
//Happens with or without ConnectionInfo.Timeout being set.
client.Connect();
//perform logic to upload file, then disconnect
client.Disconnect();
}
最后一点,上传任何文件的时间长度都比使用FTP慢得多。我听说其他公司也发生过这种情况,对此并不感到惊讶,但这可能有助于解决问题。
有人知道是什么原因导致的吗?
需要修改操作系统的TCP最大SYN重传设置。windows的默认值是21。您只能使用client.ConnectionInfo.Timeout.
来降低超时时间。更多信息在这里:https://github.com/sshnet/SSH.NET/issues/183#issuecomment-299283600