Shrewsbury, competing in the second-tier playoffs for the first time in 29 years, will now face either Scunthorpe United or Rotherham United later this month for a place in the Championship.
Charlton, losers in back-to-back matches heading into this second leg, could barely get going in the opening quarter of the game.
Amos was required at the end of the first half to deny Rodman following a promising Shrewsbury attack, as the hosts stole back some momentum.
Rodman had a pop from his first sight of goal after the restart, only finding Amos with that latest attempt, but the Shrews were in front moments later as Morris - who was lucky to avoid seeing red for an elbow - took a touch to control the ball and fired home following some good work from Shaun Whalley.
Requiring a couple of goals to keep their season alive, it took Charlton until 11 minutes from time to fashion their next opening of any note.
Town goalkeeper Dean Henderson dropped a simple catch from a corner and Aribo had a chance to bury the ball at the far post, only for a couple of opposition defenders to help the ball wide.
The final opportunity fell the way of Stefan Payne, who was unable to beat Amos from a late one-on-one - the Charlton keeper denying Payne before recovering to keep out Nolan's follow-up attempt.
SHREWSBURY TOWN (4-1-4-1): Henderson; Bolton, Nsiala, Sadler, Beckles; Godfrey; Whalley (Riley 89'), C.Morris (Payne 69'), Nolan (John-Lewis 89'), Rodman; B.Morris
CHARLTON ATHLETIC (4-1-3-2): Amos; Dijksteel (Sarr 88'), Bauer, Pearce, Dasilva; Konsa; Aribo, Ajose (Mavididi 59'), Fosu (Kaikai 62'); Magennis, Forster-Caskey