The visitors reached 200-8 at stumps on day two in their second innings. The batting effort came after debutant spinner Akila Dananjaya led an inspirational attack to dismiss Bangladesh for 110 in the morning session.
Silva was batting on 58, his second fifty in the game, which came amid a regular fall of wickets on what seemed a difficult batting pitch at the Sher-e-Bangla National Stadium.
The highest successful run-chase at the ground is England's 209-1 against the hosts in 2010.
Suranga Lakmal, who claimed three wickets with his pace bowling, was keeping Silva company on seven as the islanders kept building on their sizable first-innings lead of 112.
Paceman Mustafizur Rahman took three wickets while spinners Taijul Islam and Mehedi Hasan Miraz claimed two each.
Opener Kusal Mendis was out early after veteran left-arm spinner Abdur Razzak trapped the batsman leg-before for seven.
Left-handed opener Dimuth Karunaratne, who made 32, and Dhananjaya de Silva, who hit 28, got starts but failed to convert them into bigger scores.
Silva got to the grind building crucial partnerships including a 51-run fifth-wicket stand with skipper Dinesh Chandimal, who made 30.
Earlier Bangladesh, who started the day on 56-4 in response to Sri Lanka's 222, faltered against Dananjaya's mystery spin that rattled the hosts' middle and lower-order.
Dananjaya, who is playing his first Test after 19 one-day internationals and nine Twenty20 games, returning impressive figures of 3-20.
The 24-year-old Dananjaya has off-spin as his stock delivery but can can surprise the batsmen with leg-spin googly and carrom balls.
Dananjaya cleaned up skipper Mahmudullah Riyad for 17, and got two more wickets in Sabbir Rahman -- out for a duck -- and Razzak to flatten the Bangladesh batting.
Mehedi, who was sent in as nightwatchman on day one, remained unbeaten on 38 -- the highest score in the Bangladesh innings.
The first Test ended in a draw in Chittagong.
First Published: February 9, 2018, 5:39 PM IST