With Lionel Messi sitting out the tie with a slight injury, it was Frenkie de Jong who continued his strong recent form with the opening goal in the first half.
De Jong conceded the penalty that allowed Mikel Oyarzabal to equalise, though, and it was La Real that threatened most as the game entered extra time, with Marc-Andre ter Stegen in strong form and substitute Adnan Januzaj hitting the post with a free-kick.
Ter Stegen proved pivotal in the shoot-out, making two saves, before Riqui Puig buried his spot-kick to send Barca through.
The Germany international made a fine one-on-one save to deny Alexander Isak as La Real looked by far the more threatening in the early exchanges.
Barca seemed to settle after 25 minutes and twice came close through Martin Braithwaite, while Ousmane Dembele was menacing Nacho Monreal down the right.
The Catalan's growing pressure told six minutes before half-time, Antoine Griezmann clipping a cross towards De Jong, who reacted well to steer a header past Alex Remiro.
De Jong handed La Real an equaliser 51 minutes in, his handball allowing Oyarzabal to send Ter Stegen the wrong way from the spot.
An end-to-end contest ensued, La Real threatening on the break through Isak and both Pedri and Griezmann coming close with powerful efforts.
In extra time, Ter Stegen made a spectacular one-handed save to keep out Joseba Zaldua's rocket before Dembele sent a shot straight at Remiro after Griezmann had stolen back possession.
Griezmann saw a volley smothered and Barca was very nearly hit on the break, Ter Stegen doing enough to deny Oyarzabal after the forward had failed to connect properly with Januzaj's cross.
Januzaj himself had a shot just prodded past the left-hand post after a strong run and then came closest of all to a winner, clattering the post with a wicked free-kick as Ter Stegen looked to get a fingertip to the ball.
De Jong hit the post with Barca's first penalty, but Ter Stegen saved from Jon Bautista and Oyarzabal and Willian Jose hit the post after Dembele had scored.
Griezmann skied his effort horribly after Miralem Pjanic and Mikel Merino each scored, but although Januzaj also converted, Puig showed nerves of steel to send the Catalans into the final.