Glasgow Warriors' coach Gregor Townsend's decision to make 13 changes nearly backfired as Zebre went close to recording their first Pro12 victory.
Penalties by Gonzalo Garcia and Luciano Orquera, who also scored a try and conversion, put Zebre ahead.
But tries by Tim Swinson, DTH Van der Merwe and Tim Swinson inched Warriors back into the game.
Orquera kicked the sides level again after the break, but Peter Horne's penalty gave Glasgow the win.
However, it was a win at a price, with injuries being suffered by in-form van der Merwe and Moray Low.
Glasgow looked like a team of strangers early on as Zebre took full advantage of the strong wind and rain blowing into the faces of the home players.
Orquera fired a routine penalty to put the visitors ahead after only four minutes before Garcia used the elements to full advantage by delivering a thumping drive between the sticks from deep inside his own half five minutes later.
With confidence filling the Zebre chests, winger Leonardo Sarto weaved his way past a series of half-hearted tackles to the edge of the Glasgow try-line and fly-half Orquera darted under the posts, following that up with a simple conversion.
Eleven minutes gone and Glasgow looked ragged and in deep trouble - and a missed penalty by Ruaridh Jackson did not help their mood.
However, a bit of soccer in front of the Zebre posts and Swinson won the race to touch down for a try that, along with Jackson's conversion, revived home spirits after 20 minutes.
The match looked to have taken a significant turn as, within another five minutes, Zebre were down to 13 men after sin-bin offences by flankers Filippo Cristiano and Mauro Bergamasco.
Yet, another Orquera penalty extended the Italians' lead to 16-7 before Glasgow started to eat into their advantage.
Van der Merwe touched down in acrobatic fashion in mid-tackle for his fifth try of the season after 33 minutes and, although Jackson missed the conversion, the hosts were back in the game.
Canada winger van der Merwe was the inspiration again and, despite pulling up with a hamstring injury that forced him out of the game, unloaded for Morrison to score and edge Glasgow into the lead for the first time.
This time, Jackson converted to make it 19-16 at the break.
Zebre bounced back five minutes into the second half when, the wind having died down, Orquera sent over a 40-metre penalty to level.
Glasgow pressed forward, but the visitors held out until replacement Horne kicked a penalty with eight minutes remaining.
Warriors and Scotland prop Low was stretchered off with what looked like a leg injury as his side conceded a penalty, but Daniel Halangahu missed the chance to level and secure Zebre's first point.
Glasgow Warriors head coach Gregor Townsend: "It was our poorest performance of the season. We did not start well and we did not convert our chances in the second half.
"But a win is a win and that's what I was telling them in the dressing-room.
"Sean Kennedy was outstanding on his debut.
"The weather was not good and it was not a good display for a new guy to come in, but his play, his sharpness, his passing and kicking were great."
Glasgow Warriors forward Tim Swinson: "No team in this league is a mug and they showed their pedigree.
"Rain and wind isn't your friend when playing rugby, but you have to get used to it at Scotstoun.
"There were 13 changes, but it was not a weakened side. I think any team we put out can be competitive."
Glasgow: Thomson, Seymour, McGuigan, Morrison, van der Merwe, Jackson, Kennedy, Reid, Gillies, Cusack, Ryder, Swinson, MacDonald, Fusaro, Strauss. Replacements: Hogg for van der Merwe (41), Horne for Jackson (70), Fainga'anuku for Reid (76), Hall for Gillies (58), Low for Cusack (59), Eddie for MacDonald (59), Wilson for Strauss (70). Not Used: Matawalu.
Zebre: Halangahu, Sarto, Pratichetti, Garcia, Sinoti, Orquera, Chillon, Aguero, Giazzon, Redolfini, Geldenhuys, van Vuuren, Cristiano, Bergamasco, van Schalkwyk. Replacements: Pace for Garcia (41), Buso for Orquera (60), Martinelli for Chillon (78), Manici for Giazzon (71), Fazzari for Redolfini (53), Caffini for van Vuuren (49). Not Used: De Marchi, Belardo.
Ref: Leighton Hodges (RFU)