The tourists chasing 143-run victory target survived mini collapse on two occassions before overhauling the Lankan total with 10.2 overs to spare. Dhoni top-scored for India with 54-ball 39. Badri remained undefeated on 27. Kohli and Yuvraj chipped in with 37 and 20 respectively.
Earlier Left-arm seamer Zaheer Khan produced a superb spell of seam bowling as India skittled Lanka to paltry 142.
Zaheer eliminated the cream of Lankan batting with his prolonged first spell that read 8-3-11-4. The hosts, who wilted under pressure exerted by India new ball bowlers, were eventually bundled in 38.3 overs.
No. 8 batsman Thilana Thushara made a strokeful 44. He added an invaluable 74 runs for the seventh wicket stand with Kulasekara (25).
India, chasing a small but tricky target, lost two top-order wickets in the shape of makeshift opener Pathan and Raina in the fifth over with only 16 runs on board before Kohli and Yuvraj steadied the ship with a 36-run stand. However Lanka struck back thro' Thushara and Mendis as India slumped from 52/2 to 75/5 in 20th over.
Skipper Dhoni joined by debutant Badri in the middle batted sensibly and put on the crucial 60 runs for the sixth wicket stand.
The duo grafted and nudged for singles on a tricky wicket and ran hard between the wickets to edge their side closer.
Dhoni playing across the line to a length delivery off Fernando was bowled on the doorstep of victory. However Badri stood firm to ensure his side home.
The depleted batting resources for India with Gambhir adding to a long injury list forced Dhoni to opt fielding. However the decision to bowl first paid dividends when the new ball attack utilised the seamer-friendly conditions in a measured way.
The initial burst from Zaheer ripped off Lankan top-order with Sangakkara being cleaned up in the very second over. Then followed Jayawardene, attempting to guide the length delivery to third-man got a faint edge and flew to Yuvraj at slip cordon. Two balls later
Zaheer snared Kapugedera caught Dhoni for 2 as Lanka slumped to 3/10 in six overs.
In the following over Praveen sent Silva packing for duck.
Zaheer struck after a lull for six overs. The left-arm seamer swung the ball back from the outside the off stump line to rap Jayasuriya on front pad for a plumb LBW. Lanka lost one more wicket in the shape of Dilshan. The Lankan all-rounder pulled Pathan straight into the hands of debutant Badri stationed at long-leg to leave Lankan innings tottering at 44/6.
Kulasekera joined by Thushara in the middle steadied the Lankan ship with a responsable 74-run stand. Thushara played a strkeful innings while his partner Kulasekara a patient one. The duo guided their side past 100 and ensure a fighting total on a two-paced wicket.
The teams, tied at 1-1 in the five-match series, will travel to Colombo for the third one-dayer to be played at the R Premadasa Stadium on Sunday.