Kovalchuk, playing his first game since Nov. 9 with the Los Angeles Kings, had an assist on defenseman Ben Chiarot's second goal, which got Montreal within 3-2 at 11:47 of the third period.
The Canadiens had three shots the rest of the game, two with goalie Carey Price pulled for the extra attacker to give them a 6-on-4 power play after Jets defenseman Luca Sbisa was called for hooking at 16:43.
[WATCH: All Jets vs. Canadiens highlights]
"That's frustrating because Price, he gave us some unbelievable saves in the second to keep us in the game," Kovalchuk said. "And a few little mistakes cost us, but I like the way we fight to the end, and it says a lot that we never give up. So it's a bump in the road, but we're going to keep working and getting better. Tomorrow (at the Detroit Red Wings), it's a new day and a must-win for us."
Nikolaj Ehlers scored shorthanded and had an assist for Winnipeg (23-16-4), which won for the second time in seven games (2-3-2). Connor Hellebuyck made 29 saves.
"I thought both teams played a pretty good game, pretty exciting right to the end," Hellebuyck said. "And I thought we stuck with it and we battled hard and our [penalty kill] was great, so hats off to the guys in front of me tonight."
Price made 24 saves for Montreal (18-18-7), which is 0-5-1 in its past six games.
"We feel like we're playing the right way for the most part, just obviously not scoring as many goals as we need to," said Chiarot, who played 305 games in six seasons for the Jets before signing a three-year contract with the Canadiens on July 4, 2019. "Carey's playing great for us, giving us a chance to win every night. We're doing the right things, we're just not finishing around their net. So that's going to have to come by committee right now, and we're going to have to dig around their net a little harder."
Kovalchuk had four shots on goal and six hits in 19:25 of ice time after signing a one-year, two-way contract worth $700,000 with Montreal on Friday.
Video: WPG@MTL: Chiarot wires wrister home for second goal
"He looked good out there," Price said. "You know he's very excited to be here. He's bringing a lot of enthusiasm into our lineup, and we're very happy to have him here."
Kovalchuk had nine points (three goals, six assists) in 17 games with the Kings this season. He was a healthy scratch in his final 18 games before he was placed on unconditional waivers Dec. 16 and had his contract terminated the next day.
"It's been an unbelievable few days so far, and the way the fans responded and the guys in the locker room, I appreciate it very much," Kovalchuk said. "It's very important to me."
Ehlers set up Josh Morrissey's goal at 1:32 of the second, a rising wrist shot through a crowd in front of the net that gave Winnipeg a 1-0 lead.
Blake Wheeler got his second straight assist on Ehlers' goal on a 2-on-0 breakaway at 4:46. After Tomas Tatar was unable to handle a cross-ice pass from rookie Nick Suzuki on the Canadiens' first power play of the game, Ehlers passed ahead to send Wheeler in alone before scoring on a return pass to make it 2-0.
"What we try to do is pressure them off their breakout," Ehlers said. "He tries to make a seam pass in the neutral zone, and I need to step up there. And I saw an opportunity and got it."
Chiarot scored on a slap shot from the top of the left face-off circle to make it 2-1 at 11:03.
Andrew Copp put the Jets up 3-1 when he scored unassisted on a breakaway at 10:16 of the third.
Video: WPG@MTL: Copp sneaks shot past Price on partial break
"I wanted to make sure I put something hard on the net because I knew he was backing in just based on my speed," said Copp, who was activated from injured reserve after missing the past eight games. "So it was lucky enough to trickle in."
They said it
"The first goal is a perfect example of what we needed to do. We worked the puck a little bit harder on the outside and make sure we got net traffic. So I would say a starting point. I still think we gave back a lot of zone time coming through the neutral zone. I never tell them I want the puck dumped, but sometimes the other team does a real good job and that's your best, smartest play. I think we left a lot of zone time in some neutral-zone decisions, but it was a good start." -- Jets coach Paul Maurice
"I'm beyond frustration now. I'm just going to play and do the best I can and try and get past any frustrations or negative attitudes." -- Canadiens goalie Carey Price
Need to know
Kovalchuk, at 36 years, 266 days old, is the third oldest player with a point in his Canadiens debut. Jack Laviolette was 38 years, 145 days old when he had an assist in his NHL debut Dec. 19, 1917, and Robert Lang was 37 years, 296 days old when he scored Oct. 10, 2008. ... It was Chiarot's first multigoal NHL game. ... Jets forward Adam Lowry had two shots on goal, five hits and a plus-1 rating and played 16:51 in his 400th NHL game.
Jets: At the Toronto Maple Leafs on Wednesday (7:30 p.m. ET; SN, TVAS, NHL.TV)
Canadiens: At the Detroit Red Wings on Tuesday (7:30 p.m. ET; FS-D, TSN2, RDS, NHL.TV)
Video: Ehlers, Hellebuyck lead Jets past Canadiens