2017-12-14 38 views
4

オンラインコードを展開するためのgoプロジェクトを書きました。私はリモートマシンといくつかを実行する必要がstartreloadのようなコマンドです。golang:ssh:ハンドシェイクに失敗しました:EOF

私は200台以上のマシンを持っているので、私はこの仕事をするためにルーチンを使います。

問題はときどき sshの失敗をスローssh: handshake failed: EOFまたはssh: handshake failed: read tcp 10.19.177.216:44721->10.19.139.36:22: read: connection reset by peerなぜですか?

私のコアコード:

func RunRemoteCmd(selfDesc string, host string, cmd string, ch chan<- RunResult) { 
    startTime := time.Now() 
    sshConfig := &ssh.ClientConfig{ 
     User: "root", 
     Auth: []ssh.AuthMethod{ 
      publicKey, 
     }, 
     HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error { 
      return nil 
     }, 
    } 

    addr := fmt.Sprintf("%s:22", host) 
    connection, err := ssh.Dial("tcp", addr, sshConfig) 
    if err != nil { 
     ch <- RunResult{selfDesc, err.Error(), "", time.Since(startTime)} 
     return 
    } 

    session, err := connection.NewSession() 
    if err != nil { 
     ch <- RunResult{selfDesc, err.Error(), "", time.Since(startTime)} 
     return 
    } 
    defer session.Close() 

    var out bytes.Buffer 
    session.Stdout = &out 

    session.Run(cmd) 
    ch <- RunResult{selfDesc, "", out.String(), time.Since(startTime)} 
} 

答えて

1

たぶん複数のssh接続は、リモートサーバーによって拒否。

私は1つのサーバーを変更しますconnectionと多くのNewSessionこの問題は修正されました。

関連する問題