The Roman side has now reached back-to-back European finals under coach Jose Mourinho following last season's Europa Conference League title.

The visitors were on the backfoot for the entire game and had to survive intense pressure from the Germans, who missed a lot of chances and also hit the woodwork, as they advanced thanks to last week's 1-0 win in Italy.

They will play Sevilla, who beat Juventus 2-1 (3-2 on aggregate), in the final on May 31 in Budapest.

It all started well for Leverkusen, looking to reach their first European final in 21 years.

Apart from a second-minute chance for Roma's Lorenzo Pellegrini, the hosts had the upper hand in the first half with a dozen efforts on goal compared to their opponents’ one.

Moussa Diaby rattled the crossbar with a powerful shot in the 12th minute and Kerem Demirbay's low drive in the 21st was saved by goalkeeper Rui Patricio.

The visitors tried to push up a bit higher in the second half to intercept Leverkusen's attacks earlier, but the hosts kept finding ways to create chances.

Demirbay forced another good save in the 67th from Patricio, who thought he was beaten by Sardar Azmoun minutes later only for the Iranian's shot to sail just wide.

Leverkusen had 23 efforts on goal, but it was Mourinho's Roma that went through even if they had just the one effort on goal in the entire game.

“All that was missing was a goal,” said Leverkusen's Demirbay. “We did not have that bit of luck. It was bitter not to be rewarded for such a performance. But I am proud of the way we played.”

In Spain, the other semi-final between Sevilla and Juve went to extra-time after a 1-1 draw made it 2-2 over two legs. 

Substitute Erik Lamela then headed in on 95 minutes to send the record six-times winners back to the final and prevent an all-Italian showdown.

Juve’s Dusan Vlahovic had struck on 65 minutes from Adrien Rabiot's assist but fellow substitute Suso levelled in fine style from distance on 72’ to force 30 minutes more.

AAP