2017-12-14 3 views
4

Ich schrieb ein Go-Projekt, um Online-Code bereitzustellen. Ich muss Remote-Maschine und führen Sie einige startreload wie Befehl.Golang: ssh: Handshake fehlgeschlagen: EOF

Ich habe 200+ Maschinen, also benutze ich Routine, um diese Aufgabe zu erledigen.

Das Problem ist manchmal ssh Fehler werfen ssh: handshake failed: EOF oder ssh: handshake failed: read tcp 10.19.177.216:44721->10.19.139.36:22: read: connection reset by peer warum?

Mein Kern-Code:

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)} 
} 

Antwort

1

Vielleicht Verbindung mehrere ssh von Remote-Server verweigern.

Ich ändere einen Server einen connection und multiple NewSession behoben dieses Problem.

Verwandte Themen