code: func (c *Communicator) Start(cmd *remote.Cmd) error {
  	cmd.Init()
  
  	session, err := c.newSession()
  	if err != nil {
  		return err
  	}
  
  	// Setup our session
  	session.Stdin = cmd.Stdin
  	session.Stdout = cmd.Stdout
  	session.Stderr = cmd.Stderr
  
  	if !c.config.noPty {
  		// Request a PTY
  		termModes := ssh.TerminalModes{
  			ssh.ECHO:          0,     // do not echo
  			ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
  			ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
  		}
  
  		if err := session.RequestPty("xterm", 80, 40, termModes); err != nil {
  			return err
  		}
  	}
  
  	log.Printf("[DEBUG] starting remote command: %s", cmd.Command)
  	err = session.Start(strings.TrimSpace(cmd.Command) + "\n")
  	if err != nil {
  		return err
  	}
  
  	// Start a goroutine to wait for the session to end and set the
  	// exit boolean and status.
  	go func() {
  		defer session.Close()
  
  		err := session.Wait()
  		exitStatus := 0
  		if err != nil {
  			exitErr, ok := err.(*ssh.ExitError)
  			if ok {
  				exitStatus = exitErr.ExitStatus()
  			}
  		}
  
  		cmd.SetExitStatus(exitStatus, err)
  		log.Printf("[DEBUG] remote command exited with '%d': %s", exitStatus, cmd.Command)
  	}()
  
  	return nil
  }
docs: // Start implementation of communicator.Communicator interface