South Africa need 217 to win and were 49 without loss in their second innings at lunch on the third day.
A responsive pitch, coupled with poor stroke selection by both teams, led to dismal first innings totals of 119 for New Zealand and 186 for South Africa.
But Graeme Smith (15 not out) and Boeta Dippenaar, who hit four fours in his unbeaten 27, batted sensibly in the nine overs they faced before lunch.
Vettori top-scored with 60 in New Zealand's second innings of 283.
Jacob Oram and Vettori resumed on 214 for six and took their partnership to 49 before Oram drove at a delivery from fast bowler Dale Steyn. Dippenaar ran in from mid-off and dived to take a fine catch that removed Oram for 27.
Vettori and James Franklin shared 44 for the eighth wicket in a stand that ended when Franklin left a straightening delivery from medium pacer Shaun Pollock and was bowled for 19.
Vettori, who faced 91 balls and hit eight fours, was ninth out when he slashed a drive off medium pacer Andrew Hall and was caught by AB de Villiers in the gully.
Hall ended the innings with his next delivery when Chris Martin top-edged a pull shot and was caught by Hashim Amla at backward square leg.
New Zealand lost their last three wickets for no runs in the space of six deliveries.
Steyn took four for 91.
South Africa lead the three-match series 1-0.