//TODO Do not return string, also return error func Execute(client *ssh.ClientConn, command string) string { // Each ClientConn can support multiple interactive sessions, // represented by a Session. defer client.Close() // Create a session session, err := client.NewSession() if err != nil { log.Fatalf("unable to create session: %s", err) } defer session.Close() // Set up terminal modes modes := ssh.TerminalModes{ ECHO: 0, // disable echoing TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud } // Request pseudo terminal if err := session.RequestPty("xterm", 80, 40, modes); err != nil { log.Fatalf("request for pseudo terminal failed: %s", err) } var b bytes.Buffer session.Stdout = &b if err := session.Run(command); err != nil { session.Stderr = &b //return "\033[31mError: '" + command + "' failed to run\033[0m \n" } return ("\033[31m" + b.String() + "\033[0m") }