code: func (ns *NodeSession) runShell(callback ShellCreatedCallback) error {
  	return ns.interactiveSession(func(s *ssh.Session, shell io.ReadWriteCloser) error {
  		// start the shell on the server:
  		if err := s.Shell(); err != nil {
  			return trace.Wrap(err)
  		}
  		// call the client-supplied callback
  		if callback != nil {
  			exit, err := callback(s, ns.NodeClient().Client, shell)
  			if exit {
  				return trace.Wrap(err)
  			}
  		}
  		return nil
  	})
  }
docs: // runShell executes user's shell on the remote node under an interactive session