code: func newClientConn(ctx context.Context,
  	conn net.Conn,
  	nodeAddress string,
  	config *ssh.ClientConfig) (ssh.Conn, <-chan ssh.NewChannel, <-chan *ssh.Request, error) {
  
  	type response struct {
  		conn   ssh.Conn
  		chanCh <-chan ssh.NewChannel
  		reqCh  <-chan *ssh.Request
  		err    error
  	}
  
  	respCh := make(chan response, 1)
  	go func() {
  		conn, chans, reqs, err := ssh.NewClientConn(conn, nodeAddress, config)
  		respCh <- response{conn, chans, reqs, err}
  	}()
  
  	select {
  	case resp := <-respCh:
  		if resp.err != nil {
  			return nil, nil, nil, trace.Wrap(resp.err, "failed to connect to %q", nodeAddress)
  		}
  		return resp.conn, resp.chanCh, resp.reqCh, nil
  	case <-ctx.Done():
  		errClose := conn.Close()
  		if errClose != nil {
  			log.Error(errClose)
  		}
  		// drain the channel
  		resp := <-respCh
  		return nil, nil, nil, trace.ConnectionProblem(resp.err, "failed to connect to %q", nodeAddress)
  	}
  }
docs: // newClientConn is a wrapper around ssh.NewClientConn