Joachim Low's men fought back in the second half to claim a share of the spoils in what was a raucous affair in Kiev
Goals from Andriy Yarmolenko, Yevgen Konoplyanka and Serhiy Nazarenko bettered a screamer by Toni Kroos to put the hosts 3-1 up at the interval, but a second-half recovery saw Simon Rolfes and Thomas Muller salvage a draw for the visitors.
Germany controlled possession in the opening exchanges, but could not find the cutting edge to break down the spirited Ukraine back four. However, its constant pressure in the Ukraine half left it dangerously exposed at the back, and it was one such sequence that led to the opening goal of the match in the 28th minute.
After Ukraine won possession near the halfway line, a long searching ball found Andriy Shevchenko on the right flank against an under-manned German defense. His slipped pass released Artem Milevskiy towards the byline, and his cutback was poked home by Yarmolenko from close range.
Joachim Low’s men did not attempt to correct their vulnerability on the counterattack and Ukraine punished their high defensive line again nine minutes later to make it 2-0. Mats Hummels lost possession on the edge of the Ukraine area and Konoplyanka had a relatively unchallenged 80-metre charge towards goal, rounding Ron-Robert Zieler at the end of his run to double his side’s advantage.
However, Germany pulled one back within minutes through a great goal by Kroos. His through ball from midfield was headed away by the Ukraine defense, but he recovered to collect the loose ball and fire a rocket into the corner from 25 yards out.
Ukraine was not daunted by the setback, and restored its two-goal cushion two minutes later with an even better strike. Early substitute Nazarenko made an instant impact, collecting the ball some 30 yards from goal and releasing an unstoppable drive into the top corner to end the first half on a high.
Germany emerged from the break with new defensive focus and reduced the deficit on 65 minutes through substitute Rolfes. Hummels met a corner from the right with a badly-executed turnaround volley, but his effort spilled into the path of the substitute, who bundled the ball home.
The visitors controlled play thereafter, and managed to level matters through the contribution of another substitute. Muller picked up the ball on the left flank and skipped easily past two Ukraine players before placing a well-struck effort into the back of the net from the top of the box.
Neither side could be separated, and a draw seemed to be a fair result. Germany continues its Euro 2012 preparations against the Netherlands in four days' time, and Ukraine welcomes Austria.