Canadiens goaltender Peter Budaj, in his second straight start for injured starter Carey Price, stopped Penguins shooters James Neal and Sidney Crosby before denying Evgeni Malkin's slap shot for the win.
Desharnais, the third shooter for Montreal, slammed on the brakes at the top of the crease before sliding the puck by Marc-Andre Fleury.
Daniel Briere scored twice, once on the power play, and Max Pacioretty also scored with the man advantage, his 27th of the year. Brendan Gallagher netted his 15th for the Canadiens and Alexei Emelin also scored his second of the season.
Crosby, who leads the NHL with 80 points, scored his 29th and added an assist.