В 18 часов 24 декабря выступил авангард под командованием старого туркестанского сослуживца и начальника Скобелева генерала Н.Г.Столетова с заданием в тот же день занять гору Караджу. На рассвете следующего дня выступили главные силы. Войскам приходилось преодолевать препятствия пути, по которому, как говорили болгары, зимой с трудом пробирались даже охотники. За 25 декабря колонна прошла всего 8 километров из намеченных шестнадцати. На подходе к Шипке войска около 10 верст буквально ползли в глубоком снегу и выбились из сил.
Успеху перехода немало помогла беспечность турок, уверенных в непроходимости Балкан зимой. Но их силы, хотя и небольшие, все же обстреливали колонну. Приходилось выбивать их с вершин и укрытий. В рекогносцировке одной из подобных позиций был тяжело ранен Куропаткин. Выбыл из строя начальник штаба, храбрый и хладнокровный офицер, хорошо дополнявший Скобелева. Новым начальником штаба был назначен подполковник граф Ф.Э.Келлер.
В ночь на 27 декабря авангардом отряда с помощью обходного маневра была занята Имитли, которую, как оказалось, турки покинули без боя. Цель была достигнута с опозданием на сутки. Но главные силы растянувшейся колонны были еще в горах. Колонна же Мирского уже вся спустилась с гор и отбросила турецкий авангард. В 8 часов утра 27 декабря до войск Мирского с запада донеслись звуки стрельбы (как выяснилось позже, это вел перестрелку Столетов). Считая себя обязанным атаковать, Мирский перешел в наступление. В 12.30 его войска заняли первую линию обороны противника. Контратаки турок были отбиты. Но и Мирский не имел сил атаковать дальше, в резерве у него было всего три батальона. Бригада генерала Шнитникова, действующая южнее, в тот же день, 27-го, без боя заняла Казанлык. По-видимому, правильнее было бы использовать этот отряд в составе главных сил, тогда бой 27 декабря мог бы иметь более решительный результат.
Слышу недоумевающие голоса не только дотошного, но и обычного читателя: ведь планировалась одновременная атака двух колонн. Почему же Мирский вел бой один? Почему Скобелев его не поддержал?
Здесь-то и начинается цепь фактов и вопросов, вызвавших на Скобелева многочисленные, заслуженные или незаслуженные, нарекания. В час ночи 27 декабря Скобелев доносил Радецкому: «Быть готовым к атаке завтра в 12.00 со всеми силами оказывается почти невозможным, т. к., по страшной трудности дороги, главные силы до сих пор еще не спустились. Сделаю все от меня зависящее, чтобы атаковать турок завтра к вечеру, но во всяком случае и в котором часу бы то ни было, если увижу атаку левой колонны, поддержу ее, какими бы малыми силами я ни располагал. Считал бы все же предпочтительнее атаковать позже и буду действовать в этом смысле, если обстоятельства не переменятся».
Как видно из этого донесения, Скобелев собирался атаковать даже не всеми силами в случае, если бы было точно установлено, что левая колонна ведет бой. На следующий день, 27-го, Скобелев такие сведения имел. О стрельбе с той стороны, откуда ожидалось наступление Мирского, докладывали частные начальники правой колонны. Видеть мешал туман. В 12.55 и в 14.30 командир бригады болгарского ополчения полковник Вяземский докладывал Скобелеву об атаке левой колонны. Обязанный оказать помощь, но не собравший еще всех своих сил, Скобелев решил предпринять демонстрацию. В 14.00 он построил 9 батальонов и 7 сотен казаков с шестью горными орудиями. С развернутыми знаменами, под звуки оркестра эти силы двинулись на шейновский лагерь и, не переходя в атаку, на расстоянии 2000 шагов стали окапываться. Хотя обстановка требовала немедленно идти на помощь Мирскому, Скобелев в этот день так и не вступил в бой. К Радецкому он в 18.30 послал верхом лихого Дукмасова с докладом, в котором сообщал, что сбор войск еще не закончил, что колонну Мирского не видел, поэтому не атаковал, атакует завтра. Посланного Скобелев просил не задерживать и передать директивы хотя бы устно. Дукмасов благополучно вернулся на следующий день с одобрением предложений Скобелева, когда сражение было уже в разгаре.
Мучительные колебания, ощущение какой-то своей неправоты заставили Скобелева созвать военный совет с участием Столетова и Келлера. Все единодушно высказались за невозможность атаки с имевшимися в готовности двумя полками. Келлер обвинял Скобелева в том, что страх возможных, пусть даже неизбежных упреков он ставит выше интересов дела, и брал ответственность на себя. Всю ночь Скобелев промучился, терзаемый сомнениями и сознанием определенной обоснованности будущих обвинений.
К вечеру 27-го левая колонна отбила атаку противника, но сам Мирский пал духом и потерял веру в победу. На военном совете он предложил отойти и ждать подкреплений. Против этого предложения решительно выступил командир батальона саперов полковник Свищевский, который, справедливо указывая, что бой далеко не проигран, обещал за ночь надежно укрепить позицию. Военный совет согласился с ним, и за ночь были спешно возведены укрепления. Вессель-паша, со своей стороны, использовал ночь для того, чтобы сосредоточить силы в восточных редутах лагеря, намереваясь в утреннем бою сокрушить левую колонну. Правой колонне он уже не придавал серьезного значения. Проведя в 6.30 утра часовую артиллерийскую подготовку, турки пошли в атаку, но, попав под сильный огонь с неизвестных им новых укреплений, были отбиты с большими потерями. Преследуя их, войска Мирского захватили северо-восточную часть деревни Сикиричево, а на правом фланге — деревню Шипка и ближайший к ней редут, охватив, таким образом, оба фланга восточного фаса Шейновского укрепленного лагеря. Несмотря на этот большой успех, Мирский приказал, уже без военного совета, начать отход к Гюсово. Но теперь войска, руководимые генералом Кроком, просто не выполнили приказ растерявшегося командира. Они уже слышали шум боя с запада, видели, что турки оттягивают туда свои силы.
Утром этого же 28 декабря Скобелев собрал еще не всю колонну, но решил наступать. Согласно его диспозиции, наступление велось тремя линиями, расположенными последовательно в глубину до одного километра: передовой (3 батальона с шестью горными орудиями и 2 болгарские дружины), главными силами такого же состава и общим резервом из шести батальонов. Почти не имея артиллерии, Скобелев прибег к тактической новинке, которая себя с блеском оправдала. В первой линии он поставил батальоны, вооруженные берданками и совершенными для того времени ружьями Пибоди. Поддерживаемые двумя болгарскими дружинами, они провели эффективную ружейную подготовку. К этому времени была, наконец, установлена связь между колоннами (к Скобелеву прибыл посланец Мирского). Решено было начинать общую атаку. В 10 часов Скобелев подал сигнал.
Наступление началось двумя батальонами. Поскольку Вессель-паша получил возможность перебросить конницу с востока, где наступление колонны Мирского выдохлось, Скобелеву пришлось усилить правый фланг атакующей линии Углицким полком под командованием полковника Панютина, после чего редут № 2 был взят. Менее удачно шло наступление на редут № 1, на левом фланге, где обороняющиеся получили подкрепление, а командир наступавших войск, возбужденный успехом соседей и рассчитывая на такой же быстрый успех, не применил разжиженный строй и движение перебежками, как Пинютин. Сильным огнем войска были остановлены и залегли. Положение спасли барабанщик Углицкого полка, который под огнем врага пошел вперед с барабанным боем, и Панютин, взявший у знаменщика знамя и понесший его вперед. Ободренные этим примером, войска стремительно атаковали и штурмом взяли редут. К 14.00 войска Скобелева заняли на правом фланге редут второй линии турецкой обороны, а на левом — редут, батарею и траншею. Вскоре правый фланг скобелевской колонны соединился с левым флангом возобновившей наступление колонны Мирского. Сковывающий отряд Радецкого атаковал противника с севера (эту невозможную по условиям местности атаку, стоившую больших жертв, Радецкий предпринял лишь потому, что не имел верных сведений о ходе сражения).