code: func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) {
  	fullConf := *config
  	fullConf.SetDefaults()
  	conn := &connection{
  		sshConn: sshConn{conn: c},
  	}
  
  	if err := conn.clientHandshake(addr, &fullConf); err != nil {
  		c.Close()
  		return nil, nil, nil, fmt.Errorf("ssh: handshake failed: %v", err)
  	}
  	conn.mux = newMux(conn.transport)
  	return conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil
  }
docs: // NewClientConn establishes an authenticated SSH connection using c
  // as the underlying transport.  The Request and NewChannel channels
  // must be serviced or the connection will hang.