Sri Lanka's Rangana Herath grabbed three wickets to put Bangladesh under pressure on the third day of the second and final Test in Colombo on Monday.
The left-arm spinner removed Mohammad Ashraful and then accounted for well-set Jahurul Islam and Mohammad Mahmudullah off successive balls as Bangladesh reached 158-4 in their second innings at stumps.
The tourists, trailing by 106 on first innings, are now just 52 runs ahead with six wickets in hand. Mominul Haque was unbeaten on 36 with skipper Mushfiqur Rahim seven not out.
The stumble came after Bangladesh made a strong start, with Tamim Iqbal (59) and Jahurul (48) putting on 91 for the opening wicket.
Jahurul lost his patience and wicket when he stepped out of the crease, but missed the line and was stumped by Dinesh Chandimal. He hit one six and one four in his defiant 170-ball knock.
Herath bowled Mahmudullah with his next delivery but missed out on a hat-trick. Nuwan Kulasekara later dropped Mominul at mid-off when the batsman was on 30, denying Herath a fourth wicket.
Tamim was the first to go, inside-edging a Shaminda Eranga delivery on to the stumps after hitting one six and four boundaries in his impressive 12th Test half-century.
Sri Lanka were earlier bowled out for 346 in their first innings in reply to Bangladesh's 240. They lost their remaining four wickets for 52 runs in 18.3 overs after resuming at 294-6.
Off-spinner Sohag Gazi finished with 3-111 off 39 overs, while pacemen Abul Hasan, Robiul Islam and Rubel Hossain each took two wickets.
Abul got a big wicket in the seventh over of the morning session when he removed Kumar Sangakkara (139), adjudged caught behind by the TV umpire after adding 12 runs to his overnight score of 127.
Sangakkara, who scored a century in each innings of the drawn first Test in Galle, cracked 11 fours in his third successive hundred, and the 33rd of his career.
Gazi then got two wickets as he bowled Herath for three and had Kulasekara (22) caught by wicket-keeper Rahim, who took his fifth catch of the innings.
Spinner Mahmudullah ended the innings when he had Eranga (15) caught by Ashraful at the long-on boundary.