Solution 1:

You can insert two entities into the boat's Passengers list at the same depth to remove the ability for the player to enter it.

/summon Boat ~ ~1 ~ {Passengers:[{id:"armor_stand",Invisible:1b,Marker:1b},{id:"armor_stand",Invisible:1b,Marker:1b}]}

Armor stands themselves do not push the player. The Marker tag will also remove the bounding box of the armor stand to prevent interaction with the player (such as giving the armor stand items).