The Ukrainian side won all three of their group games in Kharkiv and maintained that fine record to win just a third Champions League knockout game in their history - remarkably all have come against the Giallorossi.
Eusebio Di Francesco's side were surprise winners of a group including Chelsea and Atletico Madrid and they impressed in the first half, with Shakhtar perhaps slow to start in just their second game back from a long mid-season break.
Having polished the likes of Mohamed Salah and Miralem Pjanic in recent years, Roma look to have unearthed another gem in Cengiz Under and the 20-year-old Turk put the Giallorossi ahead with his fifth goal in four games shortly before the break.
Shakhtar's first-half attacking efforts had amounted to little, but Facundo Ferreyra dragged them level soon after the break with a fine individual goal and Fred turned the game around with a picture-perfect free-kick.
Roma were similarly impressive at the Stadio Olimpico earlier in the competition, keeping clean sheets in each of their group games, and they will hope that helps them turn the tie around on March 13.
Fred scuffed a back-post chance for Shakhtar and Edin Dzeko saw a bundled effort saved as both teams began at breakneck tempo, though Roma soon began to exert a greater threat on the break.
Kostas Manolas ought to have done better than heading wide when unmarked from a corner and Dzeko too faltered when played in by Diego Perotti, failing to aim a weak sidefoot finish out of Andriy Pyatov's reach.
Shakhtar based the bulk of their attacks out wide and, though they regularly found room behind Alessandro Florenzi and Aleksandar Kolarov, the final ball was often lacking and Fred summed up their frustrated efforts just after the half-hour with a wild 25-yard effort after the Serie A side had clogged up the route to goal.
Roma slowed the pace to exert more control and took a deserved lead five minutes before the break as Dzeko neatly turned into space and played a piercing ball behind Ismaily, which Under raced onto and finished beyond Pyatov to continue his fine run in front of goal.
2 - Cengiz Ünder (20yy, 222dd) is the 2nd youngest goalscorer for @OfficialASRoma in UCL history after Antonio Cassano (20yy, 82dd). Wonder.— OptaPaolo (@OptaPaolo) February 21, 2018
Shakhtar hit back less than six minutes into the second half, Ferreyra had been previously starved of service, so took it upon himself to latch onto Yaroslav Rakitskiy's hopeful punt, nutmeg Manolas and finish calmly beyond Alisson.
As Shakhtar surged forwards, the Brazilian goalkeeper had to be on his toes to deny Marlos from close-range before he pulled off a spectacular flying stop when Taison sent a wicked shot arrowing for the top-right corner.
But there was absolutely nothing Alisson could do to stop Roma falling behind in the 71st minute as Fred sent a 25-yard set-piece fizzing over the wall and into the net via a pleasing kiss off the crossbar.
Shakhtar came within inches of scoring the game's fourth goal in stoppage time, but Bruno Peres somehow deflected Ferreyra's effort over the bar while sat on the line - an intervention that could prove to be crucial.