Mushfiqur Rahim scored a gritty unbeaten 59 to share the limelight with centurion Virat Kohli as Bangladesh kept India's series sweep celebrations on ice and ended Day 2 on 152/6 in the second Test at Eden Gardens on Saturday.
Bangladesh still trail India by 89 runs with four wickets in hand. Taijul Islam (11) was removed off the last ball of the day by Umesh Yadav (2/40).
At close of play, Ishant Sharma, who bagged a five-for in the first innings, returned with figures of 4/39 in the second.
Earlier, Kohli slammed his 27th Test hundred and equalled former Australian great Ricky Ponting's record of 41 international centuries as captain. With the century, Kohli's 20th as India captain in Tests, the 31-year-old also surpassed Ponting's tally of 19 Test tons as skipper.
India were on course to bat Bangladesh out of the maiden pink ball Test and sweep the series comfortably after declaring at 347/9 in reply to the tourists' paltry 106.
A lead of 241 runs meant it was an improbable task for Bangladesh to force even a draw and after being being reduced to 13/4 inside seven overs, it was only a matter of time before the formalities were completed.
But seasoned batter Mushfiqur and T20 captain Mahmudullah Riyad forged a 69-run unbroken partnership before the latter retired hurt after pulling a hamstring.
Mushfiqur got to his 21st fifty in just 54 balls and added another 51 runs with Mehidy Hasan before Ishant had Hasan caught at first slip by Kohli.
The tourists were 7/2 at dinner losing opener Shadman Islam for a duck as skipper Mominul Islam got out for a pair, the 23rd occasion when the captain did not open his account twice in the same Test match.
In the afternoon, it was all about Kohli's hundred as Ajinkya Rahane brought up his 21st half century to help India consolidate.
Kohli got to the landmark, his 70th international ton and 20th as captain, by tucking Taijul for two runs past square leg.
The talismanic batsman, who now has back-to-back tons at Eden Gardens with the last coming against Sri Lanka in 2017, took 159 balls to get to his century in 234 minutes after being on 59 at Stumps on the first day.
Kohli shifted gears after getting to his hundred and hit Abu Jayed for four consecutive fours to go into tea break looking good for a double ton. Rahane, who started the day on 23, smashed his 21st fifty but was dismissed soon after for 51 from 69 balls with the help of seven fours as India resumed on 174/3.
This was Rahane's fourth consecutive 50-plus score as he added 99 runs with his captain.
Kohli cover-drove Ebadat to reach 99 and, with the crowd chanting his name, took two off Taijul to bring up his century.
In the second session, India lost Ravindra Jadeja (12) and Kohli in quick succession just after the break. Jadeja lost his off stump to Abu Jayed by not offering a shot while it took a stunning catch from Taijul Islam to get rid of Kohli.
The Indian captain flicked a poor Ebadat Hossain delivery to square leg where Taijul, who was axed from the playing XI originally but returned as concussion substitute for Nayeem Hasan on Day 1, threw himself to his right from square-ish long leg to take the catch.
Ravichandran Ashwin (9) was trapped before the wickets as the hosts declared soon after with wicketkeeper Wriddhiman Saha remaining unbeaten on 14.
India triumphed inside three days in the series opener in Indore and a similar thrashing appeared on the cards for Bangladesh who were skittled out for 106 in their first innings.
Brief scores: Bangladesh 152/6 & 106 all out (Mushfiqur Rahim 59 batting, Mahmudullah 39; Ishant Sharma 4/39) vs India 347/9d (Virat Kohli 136, Cheteshwar Pujara 55; Al-Amin Hossain 3/85)