Renci ssh.net 目标机器主动拒绝,无法连接

Renci ssh.net No connection could be made because the target machine actively refused it

我们最近将一个项目部署到生产环境中,现在当我们尝试连接到外部 sftp 机器时收到此错误消息,"No connection could be made because the target machine actively refused it"。当我开发和测试应用程序时,我们连接到此服务器没有任何问题。

会有什么不同?我有管理权限,但生产服务器上的应用程序池没有。我不确定这是否是导致问题的原因,或者它是否可能是外部客户端的服务器或他们的防火墙阻止了我们。

这是一个标准的 TCP 错误

WSAECONNREFUSED - 10061

从客户的角度来看,这意味着 'there is no socket at that address listening to that port'("actively refused" 是转移注意力)。

i) 检查地址 ii) 检查端口 iii) 检查防火墙

根据我们丰富的经验(我们提供自己的网络组件)-- 这是一个防火墙问题。防火墙不允许您的请求通过。当您 运行 说 Putty 时,这是一种常见的情况,它可以工作,但您的代码却没有。这是因为许多防火墙检测知名应用程序并让它们通过,同时阻止其他应用程序。

如果您使用的是 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 地址。