People walk past a destroyed building in Kupiansk, Ukraine
People walk past a destroyed building in Kupiansk, Ukraine AFP

Ukraine's troops retook almost all of the Kharkiv region in their lightning counter-offensive, but in the city of Kupiansk -- split in two by the Oskil River -- Russian forces are fighting to hold on.

So recent is the Ukrainian victory in Kupiansk, a rail hub, that billboards erected by President Vladimir Putin's United Russia party still loom over smashed shop fronts, while shells whistle overhead.

The Kharkiv region in northeast Ukraine was an early target of Russia's invasion in February this year, and Kyiv's counterattack this month was hailed as a potential turning point in the war.

In the past two weeks, Ukraine has pushed the Russians back from the fields around the regional capital Kharkiv and has liberated a string of villages -- along with most of Kupiansk.

They have still not quite completed the symbolic feat of forcing Russia out of the entire Kharkiv region, and back into Donetsk, the eastern region the Kremlin insists was its main target all along.

On Monday, a steady stream of civilians were seeking transport out of Kupiansk, fleeing the shellfire and what locals said was the week-long failure of water and electricity supplies.

"It was impossible to stay where we were living," said 56-year-old Lyudmyla, who braved the constant crack of shells to cross the river from the disputed east bank to the relative safety of the west.

"There was incoming fire not just every day, but literally every hour. It's very tough there, on the other bank of the river."

Most of the noise is outgoing fire from Ukrainian tanks and artillery.

But -- just as a small unit of Ukrainian infantry advanced towards a bridge painted in Russia's red, white and blue national colours -- there was a fierce exchange of rocket and artillery fire.

Ukrainian soldiers took cover, ducking under a damaged brick building and a column of smoke rose in the distance.

Nearby, not yet torn down, a propaganda poster reads: "We are with Russia. One nation."

Because Kupiansk is a rail hub some military analysts said its capture would make it harder to supply Russian forces deployed further south defending their increasingly fragile gains in the Donbas.

It is also a road crossing point for the Oskil, and several bridges in the city have been all but wrecked in the fighting.

A bearded Ukrainian medic on a quad bike -- the vehicle he noted was best to negotiate the cracked and twisted bridges -- said he had brought back a wounded civilian from the other bank, his third in two days.

As families cowered by the roadside on the western edge of town waiting for a lift, a Ukrainian tank on a low hill west of the city lobbed shells over their homes, targeting Russians to the east.

"Ukraine is getting closer, but there are still Russian troops in some parts of the town," said 33-year-old Olena Glushko. "Just terrifying, terrifying. It's horrible."

Ukrainians are now a constant sight in the town, speeding around in modified civilian vehicles or marching in line with packs of supplies.

But when Olena first saw them after six months of Russian occupation, she was so overwhelmed that: "I wanted to burst into tears and to laugh at the same time."

Two men look at black smokes rising on the other side of the Oskil River in Kupiansk
Two men look at black smokes rising on the other side of the Oskil River in Kupiansk AFP
This picture released by Ukraine's Presidential press office shows Ukrainian soldiers on a tank in a street of Kupiansk
This picture released by Ukraine's Presidential press office shows Ukrainian soldiers on a tank in a street of Kupiansk AFP