Skipper Rohit Sharma and off-spinner Washington Sundar helped India enter the Twenty20 tri-series final with a 17-run win over Bangladesh in Colombo on Wednesday.
Sharma's dominant 89 guided India to 176-3 and then Sundar claimed three wickets to restrict Bangladesh to 159-6 at the R. Premadasa Stadium.
Mushfiqur Rahim's unbeaten 55-ball 72, his second successive half-century, went in vain as India secured their third win in four matches.
They now await the winner of the last league contest, which is a virtual semi-final between Bangladesh and hosts Sri Lanka on Friday.
"I felt we were 10-15 runs short with the bat at the end, but they (Bangladesh) bowled brilliantly at the death," Sharma, who was named man of the match, said after the win.
"Washington started brilliantly with the ball and his magical spell changed the game for us. The entire bowling unit too stuck to their plans and pulled it off for us," he added.
Sundar got three top Bangladesh batsmen including dangerous left-handed opener Tamim Iqbal for 27 to derail the opposition chase at 40-3.
Mushfiqur then put on 65 runs for the fifth wicket with Sabbir Rahman, who made 27, to give India a scare but the increasing run-rate finally got to the Bangladesh chase.
Sundar returned impressive figures of 3-22 while leg-spinner Yuzvendra Chahal and pacemen Mohammed Siraj and Shardul Thakur claimed a wicket each.
"It was very important for me and Chahal to bowl well.... My four overs and Chahal's four overs were very crucial and those eight overs turned good for us," Sundar told reporters.
"If we play to our potential then we could definitely win the tournament."
Earlier Sharma, who hit form after scores of 0, 17 and 11, smashed five fours and as many sixes in his 61-ball knock after India were put into bat first.
Following a watchful start against a disciplined Bangladesh bowling, India cut loose with Sharma and Suresh Raina, who smashed 47, putting together 102 runs for the second wicket.
Sharma, who registered his 13th T20 half-century, also put on 70 runs with fellow opener Shikhar Dhawan, who made 35, to lay a solid platform.
Paceman Rubel Hossain claimed two wickets and also ran Sharma out off his own bowling on the final ball of the innings.
"If we would have conceded ten less runs then we could've won," Bangladesh skipper Mahmudullah said.
"While bowling, our plan was to bowl the yorker but we didn't execute them properly. Looking forward to the Sri Lanka game, we will try to come hard at them."
Bangladesh and Sri Lanka have both lost two of their three matches. The final is slated for Sunday.