Alex Ovechkin scored his eighth goal in 11 games, and Ilya Samsonov made 29 saves for the Capitals (39-22-10), who have won two straight and four of six. They are four points behind the Penguins for third in the Metropolitan Division and 13 ahead of the New York Islanders for the second wild card into the Stanley Cup Playoffs from the Eastern Conference.
Evgeni Malkin got his 700th NHL assist, and Tristan Jarry made 39 saves for Pittsburgh (41-22-10), which is 2-6-1 in its past nine games. Sidney Crosby was held without a point after missing one game with a non-COVID illness.
The Penguins are eight points behind the New York Rangers for second in the division.
"Tonight, for me, was a different story than some of the other games," Pittsburgh coach Mike Sullivan said. "Tonight, we just weren't good enough. We didn't play well enough. We didn't execute. We were careless with the puck. So tonight, we beat ourselves in a lot of ways."
Evgeny Kuznetsov made it 5-3 with 1:41 left on a shorthanded empty-net goal before Martin Fehervary scored another empty-net goal for the 6-3 final with 27 seconds remaining.
The Penguins and Capitals each scored in the first 1:01 of the first period.
Bryan Rust gave Pittsburgh a 1-0 lead 45 seconds into the period. Malkin passed to Jake Guentzel, whose shot produced a rebound for a wrist shot from Rust in the slot.
Marcus Johansson scored 16 seconds later to tie it 1-1 when Penguins defenseman Brian Dumoulin sent a clearing attempt off him that deflected into the net.
"The response to their goal early by our goal, that was important," Washington coach Peter Laviolette said. "I didn't mind the game after that. ... As the game went on, I thought we got better and better defensively."