我们最近将一个项目部署到生产中,现在当我们尝试连接到外部 sftp 机器时收到此错误消息,“无法建立连接,因为目标机器主动拒绝它”。当我开发应用程序并对其进行测试时,我们连接到该服务器没有任何问题。
会有什么不同?我有管理权限,而生产服务器上的应用程序池没有。我不确定这是否是导致问题的原因,或者是否可能是外部客户端服务器上的某些东西或他们的防火墙阻止了我们。
如果您使用的是,请改为localhost
指定。127.0.0.1
当我使用 SSH.Net 并指定主机时,localhost
它抛出了主机主动拒绝连接的异常WSAECONNREFUSED - 10061
。当我指定时127.0.0.1
,可以建立连接。我认为这是由于 SSH.Net 中的实现:
internal static IPAddress GetIPAddress(this string host)
{
IPAddress ipAddress;
if (!IPAddress.TryParse(host, out ipAddress))
ipAddress = Dns.GetHostAddresses(host).First();
return ipAddress;
}
显然,它不能解析有效的主机名localhost
。C# Interactive 产生以下结果:
> Console.WriteLine(Dns.GetHostAddresses("localhost").First());
::1
该值::1
似乎不是可供套接字使用的有效 IP 地址。
这是一个标准的 TCP 错误
WSAECONNREFUSED - 10061
从客户端的角度来看,这意味着“该地址上没有套接字正在侦听该端口”(“主动拒绝”是一条红鲱鱼)。
i) 检查地址 ii) 检查端口 iii) 检查防火墙
根据我们丰富的经验(我们提供自己的网络组件)——这是一个防火墙问题。防火墙不允许您的请求通过。当您运行 Putty 时,这是一种常见的情况,它可以工作,但您的代码却不能。这是因为许多防火墙会检测知名应用程序并让它们通过,同时阻止其他应用程序。