The game was tied 1-1 after 20 minutes.
Sam Montembeault, making his first start since November 20 against Nashville, stopped 11 of 12 shots in the first. Montreal outshot Buffalo 15-12 in the period.
Things got more difficult for the Canadiens in the second. Right before the halfway mark of the period, Cody Eakin drove into the Montreal zone on a 2-on-1 with Vinnie Hinostroza, who passed it back to help Eakin beat Montembeault on a glove-side one-timer.
Later in the period, at the tail end of a four-minute Montreal power play, Eakin took advantage of an incomplete Jonathan Drouin pass to Nick Suzuki inside the blue line. The Winnipeg native exited the zone and sent the puck to Kyle Okposo, whose third attempt at getting the puck off found its way through Montembeault and over the goal line.
The Habs trailed 3-1 after two periods, with Buffalo outshooting Montreal 14-2 in the second stanza.
Buffalo would make it a 4-1 game early in the third, when Skinner found Thompson in the high slot and Thompson beating Montembeault with a wrister for his second of the night.
That's where things stood at the final buzzer.
The Canadiens travel straight to Pittsburgh postgame, where they'll face the Penguins in the second game of their back-to-back on Saturday night.