The Egypt forward, who scored 44 goals in 52 games for the Reds last season, equalised Leroy Sane's second-half goal barely a minute after coming on as a substitute in front of a 52,000 crowd.
Salah had another header cleared off the line and hit the bar.
Sadio Mane's injury-time penalty won the International Champions Cup match.
City's Bernardo Silva - whose Portugal side went out at the last-16 stage - made his first pre-season appearance, but the Blues are still without 15 other players who were on duty in Russia.
"It is incredible what we have done with the players we have for 75 minutes against the Champions League finalists," said City boss Pep Guardiola after the game.
Lukas Nmecha went close for City and Curtis Jones might have won a penalty for Liverpool before the break.
The action livened up after after Mane, wearing the number 10 shirt he has been given for the new season, and Sane were introduced.
When City countered quickly after Dominic Solanke's strike had been ruled out for offside, Sane outpaced the Liverpool defence before shooting into the far corner.
Salah equalised virtually straight after he replaced Jones, heading Rafa Camacho's cross in after being left unmarked.
Mane won it from the spot after Solanke had been fouled.
The game was played on a poor pitch in a stadium which had hosted a Taylor Swift pop concert at the weekend.
Liverpool manager Jurgen Klopp said: "I was not worried about the pitch, I was more worried for the pitch - we killed it completely.
"The stadium is great. The dressing room is as big as Anfield. The crowd is sensational. The pitch is not perfect." SHARE THIS STORY USING ANY OF THE BUTTON BELOW ⬇ PLACE YOUR TEXT ADVERT BELOW ⬇⬇⬇