当前位置: 首页 > 知识库问答 >
问题:

go语言作为客户端,使用ssh同时连接700多个服务器,运行一段时候为什么会报错:because the target machine actively refused it.?

孙德宇
2023-06-06

代码框架为:

func NewSSHClient(ip string, port int, user, passwd string) (*SSHClient, error) {
    config := &ssh.ClientConfig{
        User: user,
        Auth: []ssh.AuthMethod{
            ssh.Password(passwd),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        Timeout:         30 * time.Second,
    }

    sshConn, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", ip, port), config)
    if err != nil {
        return nil, err
    }

    sftpClient, err := sftp.NewClient(sshConn)
    if err != nil {
        return nil, err
    }

    return &SSHClient{
        Ip:     ip,
        port:   port,
        user:   user,
        passwd: passwd,
        ssh:    sshConn,
        sftp:   sftpClient,
    }, nil
}

func main() {

    // errors := make(chan error)
    limits := make(chan struct{}, 256)

    var wg sync.WaitGroup
    for host := range hosts {
        wg.Add(1)
        go func(host string) {
            defer wg.Done()
            defer func(limits *chan struct{}) { <-*limits }(&limits)
            limits <- struct{}{}
            for {

                for _, ng := range nginxHost {
                    a, err := NewSSHClient(hosts[host], host)
                    if err != nil {
                            log.Errorf("%s NewMonitor fail err:%s", host, err)
                            time.Sleep(30 * time.Second)
                            continue
                    }
                    a.dosomething()
                }
                
                time.Sleep(30 * time.Second)
            }
        }(host)
    }
    wg.Wait()
}

出错还是比较有规律,比如某个服务器前面三次连接正常,第四次开始及以后都会一直报错No connection could be made because the target machine actively refused it.

共有1个答案

萧晔
2023-06-06

看看这篇文章:https://dailydevsblog.com/troubleshoot/resolved-no-connection...

 类似资料:
  • 在测试设置中(单客户端服务器-运行Gatling的本地主机,在测试期间创建和关闭连接),我的单节点Zookeeper会保持所有TCP连接打开,直到测试运行完成。 在最初2分钟的测试运行中,我重复地并行创建多达10个客户端连接,这些连接存活了大约30秒,然后再次关闭它们的连接。所以在前2分钟的任何时候都有多达10个连接处于活动状态。然后测试继续8分钟,在此期间只有一个客户端连接处于活动状态。 客户端

  • 当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接

  • 我制作了一个FTP客户端(被动),它无法连接到服务器。我使用的FTP服务器是Filezilla;我只是用它来测试。每次我运行java程序(FTP客户端)时,Filezilla都会断开连接,并在Eclipse中出现以下错误: 这是FTP客户端: 这是我连接的程序: 还尝试编写我的lan ip而不是

  • 我目前有一个在非阻塞模式下使用 NIO java 库编写的桌面服务器。您可以在此处找到完整的服务器项目。我还创建了一个用于测试目的的非阻塞 NIO 客户端。你可以在这里找到这个项目。最后,服务器应该用于Android即时通讯应用程序。我使客户端和服务器都基于发送“数据包”进行通信的想法。我的意思是,Packet 类的引用被打包到字节缓冲区中并通过套接字通道发送。然后,它们在另一端反序列化并执行。

  • 我正在参加计算机组织课程,我看到了以下片段: 为什么编译器编写者需要了解汇编语言?编译器是否会将Java之类的高级语言翻译成二进制(或者Java中的字节码)?汇编语言何时出现? 我的书中有这样一句话: 高级编程语言一种可移植的语言,如C、C、Java或Visual Basic,由可由编译器翻译成汇编语言的单词和代数符号组成。 我真的认为编译器可以从高级语言变成二进制语言。这不对吗?

  • ssh连接服务执行如上代码,ssh连接会断开?好奇怪 执行结果 Connection to x.x.x.x closed. 执行系统 CentOS Linux release 7.8.2003 (Core)