After an enthralling 90 minutes which saw the tie end 2-2 on aggregate, the tie was settled when David Luiz scored the winning kick after Kepa Arrizabalaga's fine save from Lucas Moura.
Chelsea, who have now reached 15 finals in 16 years in all competitions, will face Pep Guardiola's City at Wembley on 24 February.
Blues boss Maurizio Sarri, who said after losing to Arsenal at the weekend that his players are "extremely difficult to motivate", celebrated with his team at the end.
Hazard shrugs off Sarri criticism after Chelsea reach final
How the players rated: Who was your man of the match?
Trailing 1-0 from the semi-final first leg at Wembley, Chelsea were level on aggregate when the unmarked N'Golo Kante drilled in a first-time shot from 20 yards through three pairs of legs after a corner.
Eden Hazard, who Blues boss Sarri said on the eve of the tie "has to do more", fired Chelsea into a 2-1 aggregate lead with an arrowed finish after being picked out by captain Cesar Azpilicueta.
Tottenham were without injured duo Harry Kane and Dele Alli as well as Son Heung-min, who is away with South Korea at the Asian Cup.
They failed to produce a shot on target in the first half but forced penalties when Fernando Llorente converted Danny Rose's cross.