The tourists, who resumed at 50-2 after a rain-curtailed opening day, plodded to 119-4 by lunch at the Sinhalese Sports Club with the recalled Cheteshwar Pujara holding fort with an unbeaten 55.
The side is batting at 125/5 Pujara and Naman Ojha at the crease.
Rohit Sharma, who added 55 runs for the fourth wicket with Pujara after the early dismissal of skipper Virat Kohli, was removed in the last over before lunch to leave India in trouble.
Sharma made 26 with three fours and a six before he edged a catch to first slip off fast bowler Dhammika Prasad, who was rewarded for a hostile spell in the session.
Pujara, playing for the first time in the series, has so far hit six boundaries in his seventh Test half-century.
Just 15 overs were bowled in the 75 minutes of play possible due to rain on the opening day and in that time India, sent in to bat on a greenish pitch under overcast conditions, lost two wickets.
The tourists were restricted to 22 runs in the first 15 overs of the second morning by some accurate bowling by the Sri Lankans on a clear, sunny day.
Kohli survived a torrid opening over from Prasad in which he was lucky to escape a loud shout for leg-before off the second ball and was beaten by the final ball of the over.
Kohli added four runs to his overnight score of 14 when Sri Lankan captain Angelo Mathews, who replaced Prasad at the bowling crease, had his counterpart caught behind by Kusal Perera.
Off-spinner Tharindu Kaushal, who came on to bowl in the 40th over, was hit for three boundaries by Pujara off his first three deliveries.
Sharma looked in good touch as he lofted spinner Rangana Herath for a six, but failed to see out the session.
The series is locked at 1-1 after Sri Lanka won the opening Test in Galle by 63 runs and India drew level with a 278-run win in the second match at the P. Sara Oval in Colombo on Monday.