Bayern’s early goal by Ivan Perisic was cancelled out by an equaliser from Frankfurt’s Danny da Costa, who had only been on for three minutes at the Allianz Arena.
However, Bayern’s star striker Robert Lewandowski settled the matter with the winner 16 minutes from time to claim his 45th goal this season in all competitions.
Bayern face Bayer Leverkusen, who beat fourth-tier side Saarbruecken 3-0 in Tuesday’s semi, in the final at Berlin’s Olympic Stadium on July 4.
Hansi Flick-coached Bayern, who have a seven point lead with four games left in the league, can wrap up an eighth consecutive Bundesliga title this weekend by beating Borussia Moenchengladbach and second-placed Borussia Dortmund lose at strugglers Fortuna Duesseldorf.
However, Bayern will be without both Lewandowski and their other key forward Thomas Mueller, who are both suspended for the game against Gladbach.
Eintracht wore match jerseys supporting the Black Lives Matter movement, while Bayern warmed up in T-shirts bearing the same anti-racism message.
It was the latest show of solidarity in German football following the death of George Floyd in Minneapolis, Minnesota in late May.
Bayern routed Frankfurt 5-2, also at the Allianz Arena when the sides met in the league just over a fortnight ago and once again the hosts wasted no time asserting their authority in the semi-final.
Frankfurt midfielder Dominik Kohr cleared Mueller’s header off the line with only six minutes gone.
Eintracht had another let off two minutes later when Lewandowski, the league’s top-scorer with 30 goals, was inches from converting a Mueller cross.
However, Bayern took the lead when Mueller chipped the defence and Perisic powered his header past Frankfurt goalkeeper Kevin Trapp on 14 minutes.
The Germany goalkeeper had to pull of a point-blank save to deny Lewandowski moments later.
– Da Costa delivers –
It stayed 1-0 at the break, but Bayern found themselves under pressure in the second-half.
Frankfurt’s shock 5-1 drubbing of Bayern last November led to the sacking of Niko Kovac, Flick’s predecessor as head coach, and the visitors started to win more ball in midfield.
With 66 minutes gone, Frankfurt coach Adi Huetter boosted their attack with double substitutions bringing on Japan midfielder Daichi Kamada and Da Costa.
The move paid off almost immediately.
Kamada managed to beat three defenders in the area before his speculative pass across goal found de Costa, who smashed his shot past Bayern goalkeeper Manuel Neuer on 69 minutes.
It was no more than Frankfurt deserved, but Bayern responded by moving up a gear.
Canadian teenager Alphonso Davies beat the defence in the area and squared to Lewandowski who was waiting to fire home his 45th goal in 39 matches in all competitions this season.
The referee checked for offside with VAR, but the goal stood and Bayern are into their 25th German Cup final.
Download our app and read this and other great stories on the move. Available for Android and iOS.