Match ends, Aston Villa 2, Bristol City 0.
Jonathan Kodjia scored against his former club as Aston Villa beat Bristol City to record back-to-back wins for only the third time this season.
Kodjia, who joined Villa in August in a reported £11m deal, endured a torrid first half, blasting a penalty over the bar after Gary Gardner was fouled.
But the 27-year-old's superb header put the hosts ahead after the break.
Conor Hourihane tapped home his first Villa goal after Albert Adomah's shot was blocked to seal victory.
Kodjia, whose every touch was booed by the travelling supporters, was also instrumental in the build-up to Hourihane's strike, superbly dispossessing Bailey Wright moments earlier.
Aston Villa had not won a game in 2017 prior to Saturday's 1-0 victory over Derby County, but now move up to 15th in the Championship table, nine points clear of the relegation places.
However, defeat at Villa Park increases the pressure on Bristol City head coach Lee Johnson, with his side only out of the bottom three on goal difference and having lost 11 of their past 14 league matches.
They did twice strike the woodwork against Villa, in the first half through Wright's header and then at 1-0 down via winger Calum O'Dowda.
Andre Green also hit the post with a brilliant long-range effort for the hosts, who have now kept clean sheets in two successive league matches for the first time since March 2015.
Aston Villa manager Steve Bruce:
"We've played far better than that and lost but what we have seen in the last few days is the resilience, two clean sheets.
"He [Jonathan Kodjia] can drive us all mad at times, there's no question about that. But when you look at his goals - that's his 12th in what, 24 games, that's not bad at all so fair play to him.
"He was devastated at half-time but he's come back. He's got us a good goal again."
Bristol City head coach Lee Johnson:
"I thought first half we were good, playing on the front foot.
"It's a fine line between success and failure.
"We had a wobbly spell 10 minutes into the second half and that disappointed me - we dropped a bit deep and got a bit timid."
- 21HuttonBooked at 43mins
- 22GardnerSubstituted forHourihaneat 38'minutes
- 37AdomahSubstituted forBreeat 77'minutes
- 19GreenBooked at 82minsSubstituted forBjarnasonat 86'minutes
- 33GieferBooked at 19mins
- 42WrightBooked at 68mins
- 3BryanBooked at 86mins
- 7SmithBooked at 16minsSubstituted forTaylorat 67'minutes
- 14ReidBooked at 39mins
- 11O'DowdaSubstituted forPatersonat 67'minutes
- 18WilbrahamSubstituted forTomlinat 77'minutes
- Simon Hooper
- Shots on Target
Second Half ends, Aston Villa 2, Bristol City 0.
Corner, Bristol City. Conceded by Nathan Baker.
Attempt saved. Conor Hourihane (Aston Villa) left footed shot from the left side of the box is saved in the centre of the goal. Assisted by Neil Taylor.
James Chester (Aston Villa) wins a free kick in the defensive half.
Foul by Jamie Paterson (Bristol City).
Henri Lansbury (Aston Villa) wins a free kick in the defensive half.
Foul by Lee Tomlin (Bristol City).
Attempt blocked. Jonathan Kodjia (Aston Villa) right footed shot from the left side of the box is blocked.
Attempt blocked. David Cotterill (Bristol City) right footed shot from outside the box is blocked. Assisted by Bailey Wright.
Corner, Bristol City. Conceded by Mile Jedinak.
Offside, Aston Villa. Henri Lansbury tries a through ball, but Jonathan Kodjia is caught offside.
Substitution, Aston Villa. Birkir Bjarnason replaces Andre Green because of an injury.
Joe Bryan (Bristol City) is shown the yellow card for a bad foul.
James Bree (Aston Villa) wins a free kick in the defensive half.
Foul by Joe Bryan (Bristol City).
Foul by Mile Jedinak (Aston Villa).
Bailey Wright (Bristol City) wins a free kick on the left wing.
Attempt blocked. Bobby Reid (Bristol City) right footed shot from outside the box is blocked.
Andre Green (Aston Villa) is shown the yellow card.