Antti Raanta, who was making his second start since Jan. 29, made 31 saves for the Hurricanes (34-11-4), who are 2-0-1 in their past three games.
"They've got a great squad," Carolina captain Jordan Staal said. "We play a fair amount against each other the next few weeks, in the division. It's a lot of fun. Two good teams going at it. First one is always good."
Raanta was starting the first game of a back-to-back. Frederik Andersen will start against the Philadelphia Flyers at Wells Fargo Center on Monday.
"A lot of games now coming up, and not a lot of rest," Hurricanes coach Rod Brind'Amour said. "Once we get past tomorrow, maybe a three-day break and that's it the rest of the year. We're going to be playing every other day. We're going to need them both."
Bryan Rust had a goal and an assist, and Sidney Crosby and Evan Rodrigues scored for the Penguins (31-13-8), who have lost two in a row following a four-game winning streak. Tristan Jarry made 26 saves.
"It was about attention to detail and execution," Pittsburgh coach Mike Sullivan said. "For me, in some instances there, we self-inflict with some of the opportunities that we gave them. It's hard to beat a team that's as good as Carolina is if we do that."
Fast gave Carolina a 3-2 lead nine seconds into the third when he beat Jarry from the right face-off circle to end an 11-game goal drought. Aho made it 4-2 with a one-timer on a power play at 14:18.
Rodrigues, who hadn't scored in 18 games, cut it to 4-3 on the man-advantage with 1:12 remaining.
"You try not to think about it when the puck's not going in," Rodrigues said. "You just almost try to shoot your way through it. Try to stay confident and positive throughout it."
Crosby had a chance to tie the game as time expired but couldn't corral a rebound before sending a shot off Raanta's right pad.
Jesperi Kotkaniemi put the Hurricanes ahead 1-0 at 15:18 of the first after the puck slipped away from Jordan Martinook while he battled with Kasperi Kapanen and Rodrigues.
The goal was Kotkaniemi's 11th of the season, matching his NHL career high set in 79 games as a rookie for the Montreal Canadiens in 2018-19. He's scored in two straight games following an eight-game drought.