India captain Virat Kohli remained unbeaten on a defiant 49 in a tense final session to deny England victory and seal a draw in the opening test of the five-match series in Rajkot.
England captain Alastair Cook notched up his 30th test hundred and declared his team's second innings on 260 for three in the second session, to set India an improbable target of 310.
Leg-spinner Adil Rashid, who picked up four wickets in the first innings, took another three as the hosts were reduced to 71 for four shortly after tea.
With the spinners getting the ball to turn sharply and bounce on the wearing pitch, Cook surrounded India's batsmen with close-in fielders in an effort to force a victory.
Kohli, India's best batsman, then frustrated the touring side with a fifth-wicket stand of 47 with Ravichandran Ashwin, who made 32.
The pair batted out over 15 overs to take India closer to the draw before Ashwin drove left-arm spinner Zafar Ansari straight to Joe Root in the covers.
Wicketkeeper Wriddhiman Saha did not last long as India were reduced to 132 for six with enough overs still left in the match for England to force a win.
But Kohli added another crucial unbeaten stand of 40 in 10 overs for the seventh wicket with local boy Ravindra Jadeja, who remained unbeaten on 32, to deny the tourists.
The hosts reached 172 for six when the captains shook hands for the match to end in a draw.
The result, however, could have swung in England's favour had they managed to hold on to their catches.
Vijay, India's highest scorer in the first innings with 126, was dropped on 13 by Ansari, who failed to hold on to a powerful return catch. The batsman went on to make 31.
Ansari was the unlucky bowler again in his next over when Stuart Broad dropped a much easier catch from first-innings centurion Pujara at point with the batsman on 10.
Pujara was dismissed on 18, given out leg before off Rashid with replays showing the ball had pitched outside the leg stump and the decision would have been overturned on review.
Earlier, Cook brought up his sixth hundred against India, with five of them having come while touring the country.
Resuming on his overnight score of 46, the left-hander looked unperturbed against the turning ball and was equally comfortable against India's pacemen, who got the ball to reverse swing.
Cook hit 13 boundaries in his knock of 130, which came to an end when he was caught off Ashwin.
Mishra broke England's best opening stand in India with his third ball of the day when the 19-year-old Haseeb Hammed (82) hit a flighted delivery straight back to the spinner.
Mishra also picked up Root (4) in his second over of the morning.
England promoted the hard-hitting Stokes up the order to score quick runs and the left-hander hit 29 in as many deliveries in a 68-run stand with Cook for the third wicket.