Bangladesh skipper Shakib Al Hasan returned to the side after recovering from an injury but it was Mahmudullah who took all the applauds after hitting the winning six in the second last ball of the match.
After winning the toss, skipper Shakib Al Hasan sent the hosts to bat first. The skipper struck the first blow as he took Gunathilaka out of the scenario.
Wickets came at regular intervals for Bangladesh, who kept their variations coming in frequently. Wicket-keeper Kusal Perera (61) played a crucial knock but the wickets kept falling at the other end for the hosts.
Thisara Perera (58) took Sri Lanka to a decent total of 159, but it was not a total which would have given a sense of security to the hosts.
The visitors came on to bat but lost opener Liton Das for a duck, Sabbir Rehman also followed him after a short while.
Wicket-keeper Mushfiqur Rahim (28) came and brought some stability but the real match-winning knock was played by Mahmudullah (43* off 18 balls) who blasted three boundaries and two maximums to sail Bangladesh to the finals, where they will face the Indian team who had already qualified.
Mahmudullah - Player of the Match: "One of my best wins. Players were eager to do well today. My plan was to strike the ball as hard as I can. I was quite nervous. When I and Shakib were there, I was at ease but Shakib's wicket put pressure on me. The confusion was that the ball would be the first bumper of the over."
Bangladesh will now face India in the final of Nidahas T20 tri-series on March 18, at R.Premadasa Stadium, Colombo.