code: func (tc *TeleportClient) runShell(nodeClient *NodeClient, sessToJoin *session.Session) error {
  	nodeSession, err := newSession(nodeClient, sessToJoin, tc.Env, tc.Stdin, tc.Stdout, tc.Stderr)
  	if err != nil {
  		return trace.Wrap(err)
  	}
  	if err = nodeSession.runShell(tc.OnShellCreated); err != nil {
  		return trace.Wrap(err)
  	}
  	if nodeSession.ExitMsg == "" {
  		fmt.Fprintln(tc.Stderr, "the connection was closed on the remote side on ", time.Now().Format(time.RFC822))
  	} else {
  		fmt.Fprintln(tc.Stderr, nodeSession.ExitMsg)
  	}
  	return nil
  }
docs: // runShell starts an interactive SSH session/shell.
  // sessionID : when empty, creates a new shell. otherwise it tries to join the existing session.