The Blues found ourselves 2-1 behind heading into the final 30 minutes with Mamad Sangare’s close-range header sandwiched between goals from Bradley-Paul Burrowes and Luka Lynch in an entertaining first 45.
But City pulled level for a second time through a cool Floyd Samba finish, before completing the turnaround when Kaiden Braithwaite volleyed home Charlie Gray’s pass to the far post.
Victory means Ben Wilkinson’s side will host Crystal Palace or Manchester United in the semi-finals, with fixture confirmation to follow in the coming days.
What happened
City had claimed a 4-0 victory in March’s PL2 meeting between the sides with all four strikes coming inside 28 minutes, but it was the hosts who gained an early foothold in the latest meeting at Bodymoor Heath.
It was Villa captain Burrowes who drew first blood, reacting quickest on the rebound after Spike Brits had made an excellent stop to deny George Hemmings just 90 seconds into the contest.
City had gone close moments before when Reigan Heskey stung the palms of Sam Proctor, and we mounted the perfect response by pulling level just four minutes later.
It was the result of an excellent team move down the right, with Samba’s teasing cross finding the head of an unmarked Sangare inside the six-yard box, who made no mistake.
Both sides had chances to get on the scoresheet in a pulsating first 15, with Burrowes twice going close either side of a vicious Sangare effort flashing just wide, but as the half wore on Ben Wilkinson’s side began to gain more of a foothold.
But in a repeat of the opening 45, the hosts got their noses in front early on, pouncing on a City mistake to allow Lynch to fire into the top corner on the counter attack.
Harrison Parker had been the man caught in possession for that strike, but he recovered quickly from that setback and produced an exquisite late sliding challenge to deny a Villa third as the hosts tried to extend their advantage one on one.
It would prove pivotal as City once again restored parity around ten minutes later when Samba found the far corner with a clever finish through the legs of a Villa defender.
Another beautifully crafted move from Wilkinson’s side would hand us the lead five minutes later, when Gray picked out Braithwaite’s run in behind from left-back, allowing the defender to sneak a volley in off the near-post.
City were starting to turn the screw, with Proctor called into action several times to prevent the Blues from pulling clear.
But we were thankful to Brits at the other end as stoppage time approached, with the stopper alert to the danger to deny Burrowes as Villa tried to force extra time.
The Blues held on though to deservedly book our spot in the last four.
How we lined up
Aston Villa XI: Proctor, Mosquera, Fortes, Carroll, Routh, Kone, McWilliams (Mulley 67’), Jenner (Brannigan 90’), Burrowes (C), Lynch, Hemmings
Aston Villa substitutes: Hollingshead, Burgess, Cotcher
City XI: Brits, Nfonkeu, Parker (Warhurst 90’), Noble (C), Braithwaite, Gray (Dada-Mascoll 84’), McAidoo (Henderson-Hall 90’), Samba, Sangare, Nypan, Heskey
City substitutes: Vickery, Thomas
As a result
The Blues have now progressed to the semi-finals of the PL2 play-offs.
We will face the winner of Crystal Palace and Manchester United’s quarter-final clash on Monday 4 May at the Joie Stadium, with confirmed fixture information to follow in the coming days.
News about Aston Villa v Man City
Full-match replay: Aston Villa v City - Premier League 2 play-off quarter-final
Relive our Premier League 2 quarter-final play-off with Aston Villa in full on CITY+. Watch more
8-minute highlights: Aston Villa 2-3 City EDS
The best of the action from a hard-fought win at Bodymoor Heath in the Premier League 2 play-off quarter-finals. Watch more
Watch City's PL2 play-off quarter-final clash with Villa live on CITY+ tonight
Fans with a CITY+ subscription can tune in to our Premier League 2 play-off quarter-final against Aston Villa live on mancity.com and the Official Man City App this evening. Read more