The visitors took command from the start when Jaque Fourie touched down brilliantly in the corner despite intense pressure from Sean Lamont and Chris Cusiter after he had scythed through some brittle Scottish defence.
Scotland attempts to create some fluency in the game were hampered when talented scrum-half Cusiter had to be substituted in the 12th minute by Mike Blair due to an injury to his left arm.
A minute later the Sprinboks enhanced their lead when Solly Tyibilika dived over for a try on his test debut.
After in-form Scotland lock Nathan Hines was forced off to be replaced by Scott Macleod moments later Jaco Van Der Westhuyzen dropped a simple goal to put the visitors 15-0 up after 20 minutes.
Matt Williams' men got on the scoreboard on 22 when Chris Paterson kicked a penalty from in front of the posts on his 50th cap but former Leicester star Van Der Westhuyzen cancelled that out with another drop-goal less than a minute later.
The Sprinboks effectively made the game safe within the first half-hour when Habana intercepted Hugo Southwell's ambitious pass to cruise under the posts.
Scotland ended the half on a high though when, after both Springboks locks Bakkies Botha and Victor Matfield were sin-binned, they were awarded a penalty try due to the visitors collapsing a five-metre scrum.
With their two-man advantage, the Scots pressed for another score but once again Habana intercepted a floated pass and ran the length of the pitch to demoralise the home side.
Percy Montgomery landed a penalty and Van Der Westhuyzen added another drop-goal at the start of the second half to stretch their side's lead to 38-10.
With replacements entering the fray on both sides the remainder of the half passed without notable incident before Van Der Westhuyzen crossed for the final score.
Scotland: Southwell, Paterson, Hinshelwood, Henderson, Lamont, Parks, Cusiter, Jacobsen, Bulloch, Kerr, Grimes, Hines, White, MacFadyen, Hogg.
Replacements: Morrison for Southwell (77), Ross for Parks (57), Blair for Cusiter (14), Russell for Bulloch (77), Douglas for Kerr (60), MacLeod for Hines (20), Petrie for White (57).
South Africa: Montgomery, Fourie, Joubert, Julies, Habana, van der Westhuyzen, du Preez, Steenkamp, Smit, van der Linde, Botha, Matfield, Tbilika, Rossouw, van Niekerk.
Replacements: du Toit for Joubert (75), Bobo for Julies (78), Claassens for du Preez (75), du Randt for Steenkamp (58), Coetzee for Smit (78), Britz for Matfield (65).
Not Used: Cronje.