Dasun Shanaka has held his nerve in the final over with some fine bowling as Sri Lanka restricted India to win the second Twenty20 by 16 runs.
With 21 runs needed off six balls on Thursday, Shanaka conceded only four as India were held to 8-190.
Axar Patel had smacked 65 off 31 balls to help India recover from 5-57, while Suryakumar Yadav scored 51 off 36 balls.
But it was not enough to match the Sri Lankans, for whom Shanaka also shone with the bat, smashing 56 not out off 22 balls as they notched up a formidable 6-206.
The three-match series is now level 1-1 after India won the first game in Mumbai by two runs.
It was Sri Lanka's first win in 13 T20s on Indian soil, their last win having also come in Pune in 2016.
The series decider will be played in Rajkot on Saturday.
"The Indian batsmen had enough skill to take the game away from us. But we managed to hold our nerves," Shanaka said.
"The game was set by our openers and it was good to defend in India."
Put in to bat, Sri Lanka got off to a good start as Pathum Nissanka (33) and Kusal Mendis put on 80 off 50 balls.
Mendis scored 52 off 31, including three fours and four sixes, while Patel applied the brakes well with 2-24 from four overs.
Pacer Umran Malik then hurt Sri Lanka's middle order by picking up 3-48 in a fiery four-over spell.
He bowled Bhanuka Rajpaksa (2) and Wanindu Hasranga (0), with Charith Asalanka (37) also dismissed in between.
Thanks to Malik, the visitors were reduced to 6-138 in 16 overs despite a good start.
But Shanaka then shone with the bat as he hit two fours and six sixes as India gave away 68 runs in the last four overs.