The Ligue 1 outfit knew a point was enough to keep the hosts at bay in Group F and secured exactly that thanks to captain Fekir's classy 65th-minute finish in snowy conditions.
Lyon entered the match with an outside chance of leapfrogging Manchester City into top spot, yet they were scrambling simply to secure second following Junior Moraes' opener in the 22nd minute, the Brazilian putting his team in the box seat to advance.
Paulo Fonseca's side were always on the back foot, though, and had to settle for third place and a Europa League berth after Fekir's intervention preserved his team's two-point buffer in the final table.
3 - Nabil Fekir has scored three goals in Champions League this season, only Antoine Griezmann (4) has scored more among the French🇫🇷 players. Captain. pic.twitter.com/L7zwqXuNiu— OptaJean (@OptaJean) December 12, 2018
Lyon settled the quicker of the two teams and should have gone ahead when Bertrand Traore got the wrong side of Taras Stepanenko in the 19th minute, but Andriy Pyatov smothered bravely in a one-on-one situation.
Shakhtar soon made the reprieve count, Ismaily squaring for the unmarked Moraes - who struck twice in a 2-2 draw in the reverse encounter - to cap a patient attack with a cool finish across Anthony Lopes.
The visitors failed to resolve their profligacy before the break as Kenny Tete, Traore and Ferland Mendy all spurned good opportunities for an equaliser.
The second half unfolded in more pedestrian fashion until Fekir, among the culprits in the first half, found his radar at just the right time, lethally lashing beyond Pyatov from Memphis Depay's cut-back pass.
The France international will miss the first leg of Lyon's last-16 tie after crossing the yellow-card threshold, but for now that pales into the background of his heroics in clinching qualification.
What does it mean? Lyon make foundations count
An impressive tally of four points from two meetings with City, as well as an unbeaten home record, always seemed a strong framework for Lyon to escape a tough group and so it proved in the end, a fifth successive draw meaning their lone victory in six matches - at the Etihad Stadium, no less - did not go to waste.
Fekir provides the inspiration
Lyon were looking increasingly like masterminding their own downfall as chances came and went across a frustrating opening hour.
Then, with one flick of his dangerous left foot, Fekir illustrated just why Bruno Genesio and Jean-Michel Aulas fought so hard to keep him in the last transfer window, the 25-year-old's goal one of six total shots in a performance that also included four key passes.
Traore troubles threaten to unravel Lyon
Maxwel Cornet's absence heaped extra responsibility upon Traore and the speedy forward struggle to deliver, his inability to convert multiple chances almost costing the away side dearly.
Key Opta Facts
- Shakhtar have gone three successive home European games without victory for the first time since November 2013.
- Lyon are the first side to draw five consecutive Champions League games since Bayer Leverkusen in October 2016.
- The French side remained unbeaten throughout the group stages of the Champions League for the first time since doing so consecutively in 2005-06 and 2006-07.
- Brazilian players have had 15 goal involvements in Shakhtar's eight Champions League goals this season (8 goals, 7 assists).
- Memphis Depay assisted four goals in the group stages - that is the most for a Lyon player since Juninho Pernambucano set up five goals in 2006-07.
This was Shakhtar's final engagement before the winter break as the Ukrainian Premier League heads into hibernation until February.
Lyon have no such luxury just yet - they will quickly have to put their delight at qualifying to one side ahead of Sunday's home date with Thierry Henry's struggling Monaco in Ligue 1.