Ilkay Gundogan had fired City ahead in the 56th minute but Shakhtar earned a potentially valuable point after Israeli substitute Manor Solomon equalised in the 69th.
Atalanta’s 2-0 victory over Dinamo Zagreb in Group C’s other game meant that Pep Guardiola’s side are guaranteed to finish top.
City have 11 points at the summit ahead of their final group game away to Dinamo with Shakhtar in second place on six points. Dinamo have five points and Atalanta four.
Yet while the goal of qualification was secured, it was a far from impressive performance from a team which harbours ambitions of a first Champions League triumph this season.
In recent weeks the crispness and sharpness of City’s pass-and-move play has not been up to its established standard and their defending remains a concern.
At a subdued Etihad, City survived a scare in the 15th minute when their Brazilian goalkeeper Ederson raced out of his area and completely missed the ball as he attempted to clear.
That allowed Tete to break towards the unguarded goal, but Fernandinho did superbly to cover the near post and block his compatriot’s shot.
Moments later, Ederson raced outside his box again but this time his intervention was well-timed and clean, as he slid to clear the danger with Tete threatening once more.
After a mostly uneventful remainder of the first half, City got themselves in front when Gabriel Jesus twisted and turned in the box before poking the ball to Gundogan who slotted home.
Yet Shakhtar drew level with a perfectly-constructed break that ended with Israeli substitute Manor Solomon drilling past Ederson after an excellent pull-back from Dodo.
“The target was to qualify and we have done it,” said Guardiola who was facing Shakhtar for the 13th time in his career.
“They always have quality players. In general, we created chances but the draw was enough in the end. Now we have one competition already done, and now our focus will be the Premier League,” he said. City are third in the domestic league and trail leaders Liverpool by nine points.
For Shakhtar everything is still to play for in their final match, at home to Atalanta on Dec. 11, with all three teams in the group still having a chance to join City in the knockout stage.
The result was particularly impressive for Shakhtar given they were without two key players in Taison and Marlos.
“To get a draw at City is fantastic,” said Shakhtar’s Portuguese coach Luis Castro.
“We have a family atmosphere in our team and we all get on with each other. We’ve nothing won but we’ve nothing lost yet either.”