Match ends, Bristol City 1, Aston Villa 1.
Aston Villa fought back to earn a point at Bristol City, but Steve Bruce's side have now won only one of their past eight Championship games.
Villa boss Bruce was barracked by a section of home supporters following a home defeat by Sheffield Wednesday in their previous outing, and further shouts calling for his dismissal could be heard in the closing seconds at Ashton Gate.
Josh Brownhill's low 25-yard shot wrong-footed Villa goalkeeper Orjan Nyland to put Bristol City in front, but Villa drew level just before the interval.
Conor Hourihane's set-piece was powerfully headed home by Iceland midfielder Birkir Bjarnason as Villa kept up their record of scoring in every league match so far this season.
Villa's ex-Bristol City striker Tammy Abraham almost scored at the wrong end late on, inadvertently heading towards his own goal and then watching the ball cleared off his own line.
After a disjointed first half, Villa were far better after the interval and looked most likely to find a winning goal.
Midfielder John McGinn, who scored an incredible long-range volley in the loss to the Owls six days previously, went closest but Niki Maenpaa kept out his shot from 20 yards.
Abraham, who scored 26 goals for Bristol City in 2016-17, had a first-half goal disallowed for a nudge on Maenpaa and was replaced in the final minutes because of a calf injury.
The draw ensured City avoided a third consecutive league loss and leaves them one point outside the play-off places.
Bristol City assistant head coach Jamie McAllister told BBC Radio Bristol:
"Over the 90 minutes it was probably a fair result. Both spells had chances and spells when they dominated possession.
"It was a poor free-kick to give way at that moment in the game. It gave them a little lift coming out in the second half, but it happens and it's how you react.
"Every point in the Championship is valuable and it's a good point against a good side."
Aston Villa manager Steve Bruce told BBC WM:
"We're disappointed not to win because we've had one or two terrible decisions go against us. There's nothing wrong with Tammy's goal, and we should have had a penalty.
"The goal we've conceded, whether it's a mistake or a deflection, was cruel on us. It was a tame effort, their first shot and we're behind.
"When your confidence isn't 100%, you have to roll up your sleeves and get back in the game and I thought we did that."
- 32HuntBooked at 47mins
- 11O'DowdaSubstituted forPatersonat 68'minutes
- 19EliassonSubstituted forWatkinsat 87'minutes
- 10TaylorBooked at 57minsSubstituted forDiedhiouat 68'minutes
- 21HuttonBooked at 62mins
- 26KodjiaBooked at 26minsSubstituted forBolasieat 75'minutes
- 18AbrahamSubstituted forAdomahat 90+1'minutes
- 22El Ghazi
- 23Campos Moreira
- 27El Mohamady
- Tim Robinson
- Shots on Target
Second Half ends, Bristol City 1, Aston Villa 1.
Jack Grealish (Aston Villa) wins a free kick in the defensive half.
Foul by Marlon Pack (Bristol City).
John McGinn (Aston Villa) wins a free kick in the defensive half.
Foul by Josh Brownhill (Bristol City).
Attempt blocked. Andreas Weimann (Bristol City) right footed shot from the left side of the box is blocked. Assisted by Josh Brownhill.
Foul by Axel Tuanzebe (Aston Villa).
Famara Diedhiou (Bristol City) wins a free kick on the left wing.
Substitution, Aston Villa. Albert Adomah replaces Tammy Abraham.
Attempt missed. Conor Hourihane (Aston Villa) left footed shot from outside the box is close, but misses to the left. Assisted by Jack Grealish.
Mile Jedinak (Aston Villa) wins a free kick in the defensive half.
Foul by Famara Diedhiou (Bristol City).
Substitution, Bristol City. Marley Watkins replaces Niclas Eliasson.
Foul by Yannick Bolasie (Aston Villa).
Adam Webster (Bristol City) wins a free kick in the defensive half.
Corner, Aston Villa. Conceded by Niki Mäenpää.
Attempt saved. Jack Grealish (Aston Villa) right footed shot from a difficult angle on the right is saved in the top right corner. Assisted by Conor Hourihane.
Corner, Aston Villa. Conceded by Adam Webster.
Offside, Bristol City. Niclas Eliasson tries a through ball, but Andreas Weimann is caught offside.