After seamers Varun Aaron and Ishant Sharma dismissed the openers with short deliveries, Ashwin took three wickets for 15 runs.
Opener Dimuth Karunaratne was troubled by Ishant Sharma's short balls and ended up popping a simple catch to Ajinkya Rahane at gully.
Kaushal Silva, who had been dropped on four by Shikhar Dhawan at first slip off Varun Aaron was dismissed a run later to the same combination.
Ashwin then came into the party with three quick wickets as he bowled unchanged from the City End. There was plenty of assistance for the tall spinner as he gained bounce and sharp turn.
Star batsman Kumar Sangakkara, featuring in his final international series, went on the back foot to Ashwin and was late on a defensive push and was well caught by Lokesh Rahul at silly point.
Vice-captain Lahiru Thirimanne added 27 runs for the fourth wicket with captain Angelo Mathews to temporarily stem the flow of wickets before being caught behind at first slip by Ajinkya Rahane.
Ashwin claimed a third wicket when Jehan Mubarak was dismissed for a duck as he was beaten by sharp turn and Rahul this time at short leg completed the catch.
Mathews was unbeaten on 26 at lunch.
On a dry Galle wicket, India packed their side with three spinners and had ample rewards. Leg-spinner Amit Mishra and off-spinner Harbhajan Singh complement Ashwin in the spin attack.
Sri Lanka have struggled over the past two months losing the test, one-day and T-20 series against Pakistan at home.
India has not won a test series in Sri Lanka since 1993.
Foreign Minister Paudyal discusses connectivity issue with Sri...