There used to be a tool in GRASS called Line of sight which did exactly what you were after but its been deprecated because it was pretty slow on big datasets as mentioned here.
Anyway you can use the GRASS program r.viewshed from the processing toolbox. Basically you provide a DEM and an observer point in coordinates and you will get a grid (i think defaults to Green (visible) and red (not visible)) which shows what can and can't be seen from your observer point.
Alternatively if you are after a profile line between your 2 observer points you could use the Profile tool plugin. This is quick and easy and gives a result like I have below. Get the Profile tool from the Plugins menu, search for Profile
If you want to get the start and end points of your profile to be spot on the points in your point layer, you will need to create a line which snaps to the start and end points. Also its important to digitise the line from the start point and finish on the end point, otherwise your profile will look backwards. So to get the profile from a line follow these steps:
- Create a new line layer snapping to your start and end points.
- Open the profile tool.
- In the profile tool there is a drop down box called "Selection" by default it has a value of "Temporary polyline" change that to "Selected Polyline".
- Your cursor when in the map will change to a pointer finger, click on your polyline with the cursor and your profile will draw.