The visitors were earlier bowled out 193 in their second innings with wicketkeeper-batter Rishabh Pant to-scoring with 66, to add to their lead of 178 runs that they took from the first innings.
India were looking for quick runs when they came out to bat on the fourth morning on a turning pitch but lost opener Yashasvi Jaiswal in the first over for a duck.
First-innings centurion Devdutt Padikkal and KL Rahul then put on 65 but the stand was broken by left-arm spinner Prabath Jayasuriya (3-43).
Rahul struck 35 while Padikkal reached 44 before he was dismissed before Pant took the attacking route to compile a brisk 66 off 69 balls that included eight fours and two sixes.
With more than a day and chasing a four-innings target of 372, seamer Mohammed Siraj struck an early blow to remove opener Nishan Madushka.
It got worse for the hosts when debutant Pasindu Sooriyabandara was trapped lbw first ball to spinner Manav Suthar, while Lahiru Udara and Kamindu Mendis fell to leave Sri Lanka on 47-4.
Home captain Dhananjaya de Silva (31) and Sonal Dinusha steadied the ship and took the home side to the close of play but they face an uphill task on the final day of they are to get anything from the contest.