Rohit Sharma and Washington Sundar inspired India to a 17-run win over Bangladesh which sealed their place in the Nidahas Trophy final.
Captain Rohit returned to form with a brutal 89 off only 61 balls as India posted 176-3 after being asked to bat first in Colombo on Wednesday.
Mushfiqur Rahim's second successive unbeaten 72 - from just 55 deliveries - gave the Tigers hope, but they fell short on 159-6 and face a showdown with Sri Lanka on Friday to decide India's opponents in the final two days later.
Sundar was the pick of the bowlers, the spinner taking 3-22 after being handed the new ball in a third consecutive victory for the favourites following a loss to the hosts in the opening match of the tri-nation series.
Man-of-the-match Rohit was due some runs and the opener duly delivered, getting his eye in before smashing Mehidy Hasan for one of five sixes in a masterful knock.
Rohit and Shikhar Dhawan (35 from 27) put on 70 for the first wicket before the left-hander lost his middle stump to a Rubel Hossain yorker, but Suresh Raina then combined with the skipper for a stand of 102.
Abu Hider was taken for 21 from the 18th over as Rohit and Raina (47 from 30) showed no mercy, and while both batsmen were dismissed in the final over, it was far too late for the Tigers.
Sundar had Liton Das stumped and he bowled Tamim Iqbal (27) when the dangerous opener attempted a big hoick after the spinner also got rid of Soumya Sarkar.
The-inform Mushfiqur kept Bangladesh in it, striking a six and eight fours in another impressive knock, but Sabbir Rahman (27) was the only other batsman to offer support as India got the job done.