The Tigers will take on India in the T20I tri-series final on Sunday, after chasing down the hosts’159 for 7 at the R Premadasa Stadium on Friday.
The vice-captain held on his nerves in the matchwinning unbeaten 43 off 18 balls in the virtual emotion-charged semifinal that twisted and turned this way and that.
Sri Lanka got the upper hand at the start of the Bangladesh inning as Akila Dananjaya got rid of Liton Das for 0, and then had Sabbir Rahman stumped for 13.
Opener Tamim Iqbal and in-form Mushfiqur Rahim banked on singles to ease off scoreboard pressure.
Tamim showed aggression against the spinners and added 50 runs off 40 deliveries for the third wicket.
Mushfiqur crossed 1,000 T20I runs with a single but hit straight to Kusal Perera at extra cover off Amila Aponso trying to accelerate the run rate.
Tamim fell soon, but only after scoring his fifth T20I fifty.
Mahmudullah was joined by Soumya Sarkar but the left-hander did not last long: he charged down the wicket and edged Jeevan Mendis to the keeper for 10 as the required run-rate kept soaring.
Skipper Shakib Al Hasan, back from injury for this crunch game to lift the spirits of the team, flattered to deceive. He flicked a Isuru Udana delivery down the leg straight to fine leg off to leave his side needing 23 off 12.
But man of the match Mahmudullah kept Bangladesh’s hopes alive and his cool, as well, picking occasional boundaries and running hard for singles to keep the asking rate in check.
When 12 needed off 7, Mehedi Hasan Miraj was run out from a direct hit after he failed to connect a bouncer. The next ball, Mustafizur Rahman, in desperation to get Mahmudullah on strike, got himself run out.
Bangladesh were unhappy that Udana’s second straight bouncer was not called a no-ball.
The square leg umpire apparently stretched his arm to signal a no-ball, but eventually it was deemed a legal delivery once Mustafizur was out.
High drama followed as Shakib stormed out near the boundary rope and called his players off the field, which, if they obliged, would mean Bangladesh forfeiting match and getting disqualified.
But good sense prevailed and the team management asked the batsmen to finish the game.
After three dot balls and two run-outs, Mahmudullah was back on strike with 8 needed off 3 balls.
He hit a full and wide one from Udana one-handed over extra cover for a much-needed boundary and took two more off a low full toss.
The bastman then nonchalantly launched a slow and full one over deep square leg into the stands to spark off wild celebrations by the teammates and leave the hosts shell-shocked.
Earlier, counterattacking cameos by Kusal Perera and Thisara Perera lifted Sri Lanka to 159 for 7 after they were tottering at 41 for 5 in the 9th over.
The Pereras added 97 runs for the sixth wicket with Kusal (61 off 40) reaching his 10th and Thisara stroking his maiden T20I fifty on way to 58 off 37.
Bangladesh had opted to bowl first after calling the coin right.
Shakib and Mustafiz struck early with three wickets and while Upul Tharanga was run out within the sixth over.