Bafana coach Molefi Ntseki made four changes, with Thabang Monare, Ben Motshwari, Lebohang Maboe and Luther Singh all drafted into the line-up.
Bafana had a horrible start as they were on back foot from the fifth minute after Saifeldin Bakhit gave Sudan the lead with a towering header.
Ntseki’s charges were getting a lot of chances after that but they could not bury them, with the Sudanese shot-stopper also on top of his game.
Bafana were caught on a counter-attack in the 32nd minute as Mohamed Abdel Raman went on a run from the wing, burst his way inside the box and fired a powerful strike past goalkeper Ronwen Williams at the near post.
Sudan were defending deep in their own half in the closing stages of the first stanza, which did well to restrict Bafana in the final third as they went in search of a goal.
The visitors had a chance to pull a goal back ten minutes from the break after Thapelo Morena chipped a cross towards the back post but Motshwari’s shot was saved by Eshrein.
Ntseki raised eyebrows with the substitution of Percy Tau on the hour-mark, bringing on defender Sifiso Hlanti on his place, in a triple substitution that also included the introduction of Ruzaigh Gamildien and Lyle Foster.
Morena should have pulled a goal back for South Africa in the last quarter of an hour after going clear on goal inside the six-yard box but his low shot was saved by Eshrein.
Sudan were defending in numbers in the closing minutes, with Bafana unable to break them down as the hosts held on to claim a 2-0 win that booked them a spot at Afcon after finishing second while Bafana failed to qualify in third place.