Needing five off the final ball, the India wicketkeeper drilled a superb six over extra-cover to seal the win.
India needed 34 off the last two overs after Mustafizur Rahman had kept Vijay Shankar quiet in the 18th over, bowling four dot balls.
Skipper Rohit Sharma (56, 42b, 4×4, 3×6) had got India off to a flier before gifting away his wicket.
Earlier, the Indian pacers undid the hardwork of the spinners as Bangladesh scored a competitive 166 for eight, riding on Sabbir Rahman’s 50-ball 77.
Off-spinner Washington Sundar (one for 20) and leg-spinner Yuzvendra Chahal (three for 18) were brilliant in the PowerPlay but the duo of Vijay Shankar (none for 48) and Shardul Thakur (none for 45) leaked 93 runs between them on a good batting surface.
While the Washington-Chahal duo bowled 20 dot balls between them with only one boundary, Shankar and Shardul conceded 10 boundaries and four sixes.
Jaydev Unadkat (two for 33) did come back well in his final over but Sabbir cleverly waited for the spinners to finish their quota as he launched a furious assault on the pacers during the back-10.
Skipper Rohit Sharma taking a gamble by introducing both spinners inside the PowerPlay overs instead of using an effective part-timer like Suresh Raina when Shardul and Shankar were being hit, came as a surprise.
The last six overs of the Bangladesh innings yielded 66 runs — mostly coming from Sabbir’s blade.
The 17th over was the one when Shankar fluffed his lines with the back-of-the-hand slower deliveries as Sabbir hit him for a six over deep mid-wicket followed by one over long-on.
Shardul, whose knuckle ball has been a hit was picked up by Sabbir in the next over for two cheeky boundaries. Earlier, Washington, who has grown from strength to strength, again stifled the batsmen in the PowerPlay overs.
Bangladesh openers Tamim Iqbal (15) and Litton Das (11) started off in a whirlwind fashion but Washington forced the latter to play a slog sweep and the ball ballooned for Raina to complete a lovely catch. (Courtesy PTI)