code: func (c *Client) RunWithString(command string, stdin string) (string, string, int, error) {
  	shell, err := c.CreateShell()
  	if err != nil {
  		return "", "", 1, err
  	}
  	defer shell.Close()
  
  	cmd, err := shell.Execute(command)
  	if err != nil {
  		return "", "", 1, err
  	}
  	if len(stdin) > 0 {
  		cmd.Stdin.Write([]byte(stdin))
  	}
  
  	var outWriter, errWriter bytes.Buffer
  	var wg sync.WaitGroup
  	wg.Add(2)
  	go func() {
  		defer wg.Done()
  		io.Copy(&outWriter, cmd.Stdout)
  	}()
  
  	go func() {
  		defer wg.Done()
  		io.Copy(&errWriter, cmd.Stderr)
  	}()
  
  	cmd.Wait()
  	wg.Wait()
  
  	return outWriter.String(), errWriter.String(), cmd.ExitCode(), cmd.err
  }
docs: // RunWithString will run command on the the remote host, returning the process stdout and stderr
  // as strings, and using the input stdin string as the process input