After the matched finished 0-0 following extra time at Donbass Arena, Cesc Fabregas swept home the winning spot-kick to put Spain into the final.
Xabi Alonso and Joao Moutinho both saw their opening penalties saved, but Portugal blinked first when Zenit St Petersburg centre-back Bruno Alves hit his side's fourth penalty against the crossbar.
Fabregas stepped up and, just as he had done in the penalty shoot-out win over Italy in the EURO 2008 quarter-finals, the Barcelona man held his nerve, steering the ball into the bottom-left corner to send Portugal home.
"We are so happy to have reached another final. I don't know if that has ever been done in history," Fabregas told Spanish television channel Telecinco, his voice cracking with emotion. "They told me I was going to take the second kick, but I said: 'No, I want to take the fifth one.
"I had a premonition, an intuition that things were going to come off and that life had reserved something for me as nice as this."
Reigning world and European champions Spain, who are bidding to become the first team in history to win three major competitions in a row, will face either Italy or Germany in Sunday's final in Kyiv. "We were stronger in extra time, but overall it was a fairly even contest," said Spain coach Vicente del Bosque.
"It was tough. We took a while to get into our stride. The Portuguese were very well organised. Germany and Italy are equally strong."
It was a deeply disappointing end to the tournament for Portugal captain Cristiano Ronaldo, who had threatened to fire his side into only their second major final, but who did not even get a chance to have his say in the shoot-out.
"If I had to choose a way of losing, I wouldn't choose this," said Portugal coach Paulo Bento. "But you have to lose some way. Spain are a great team and we can leave the pitch with our heads held high."