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.
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.
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.
Bangladesh and Sri Lanka have both lost two of their three matches. The final is slated for Sunday.