晋安帝义熙十二年(公元416年)三月,后秦皇帝姚兴病死,太子姚泓继位。姚泓,字元子,自幼孝友宽和,但无经世之用。姚泓身上孝服还没有脱,后秦国内一片乱起,先后有其兄弟姚懿、姚弼想杀他自代。当时,赫连勃勃刚刚掠数郡满载而归,南面的刘裕又统大军气势汹汹地杀来。面对这样的危局,姚泓日日紧锁愁眉。主弱国疑,终于让刘裕盼来了北伐平秦的最佳历史时机。
在宣誓北伐之前,刘裕在全国来一次大赦,规定凡是刑期在五年以下的人都一律释放。并且对所有任期届满,很久没有提拔的官员都提拔官阶。世子刘义符留守建康,刘穆之为左仆射,总摄内外。
一切都准备好了之后,在刘裕脑中盘旋了数年之久的北伐大业终于付诸实施。
于是晋军分为五路,由步军、水军两部分组成。第一路为步军前锋,由王镇恶、檀道济统兵,从淮河、淝水向许昌和洛阳进发。王镇恶本就是北方人,只因前秦被后秦所灭才南逃归晋,因此他对后秦实在是怀着刻骨的仇恨,在大军出发之前,王镇恶就立下誓言∶此番北伐,如果不攻克关中,绝不再过长江。
第二路由朱超石、胡藩自襄阳出发进攻阳城(今河南登封东南),主要目的是为了策应王镇恶的前锋主力。
第三路由沈田子、傅弘之率领,自襄阳进攻武关(今陕西商县西南)。
第四路是水军,由沈林子、刘遵考率领,从石门出发,自汴水进入黄河,直逼洛阳。
第五路也是水军,由王仲德率领,开通巨野被淤塞的旧河道进入黄河。
王镇恶、檀道济皆是能将,手下兵精粮足,一气攻拔项城、许昌等地,后秦诸屯守皆望风而附。后秦留守洛阳的姚洗不听人劝,没有固守金墉,直搏晋军兵锋。随即几路大败、姚洗最终不敌,献城出降。
王仲德方面,东晋水军由清河入黄河,北魏滑台守将尉建竟然吓得连箭也不发一支,弃城逃跑。王仲德占领滑台后对外宣称∶ "我们本来想给魏国七万匹布帛借道伐秦,谁想到滑台守将弃城跑掉了!"魏主拓跋嗣闻讯大怒,派兵济河,将尉建斩于军前,投尸河中,并质问晋军为何侵占魏国城池。晋军当时不想与魏国为敌,多添仇家,便说等平秦后马上归还。刘裕也假装卑词下意,表示∶"洛阳,晋之旧都,一直为羌人所据,我们晋军来此只想进据洛阳,修复陵庙。而且秦人一直收留晋朝叛将,与晋为患,现在我们是借道伐秦,实不愿与魏国为敌。"
然而,外交辞令虽然漂亮,晋、魏两国仍剑拔弩张,各怀鬼胎,密切关注对方的一举一动。晋安帝义熙十三年(公元417年)二月,刘裕从彭城出发,自引水军亲自参加北伐战争。
这个时候,先锋王镇恶、檀道济等人已合兵于潼关,对姚绍守军展开猛攻。姚绍是姚泓叔父,有谋善战,采取固守坚城的方法,希望孤军深入的晋兵兵老城下。同时,他派大将姚鸾出兵切断晋军粮道,不料,姚鸾反被晋军偷营,数千后秦兵连同主将一起被杀。刘裕水军入清河后,将溯黄河西上,为避免与魏军摩擦,就假装客气,遣使魏国,表示要借路。
姚泓窘急,后秦与北魏有姻亲关系,他忙遣使求魏国发救兵。魏国君臣议事,大臣崔浩表示说;"姚兴已死,姚泓懦弱。刘裕乘危攻伐,其志必取。如果我们遏止其军,刘裕心生愤恨,上岸北侵,那样的话,我们魏国就是代秦受敌。现在,柔然在北侵扰,民又乏食,如果我们与刘裕开战,南北顾此失彼,不如听任刘裕西上,然后屯兵以塞其东。如果刘裕取胜,会因我们借道给他心存感激;如果刘裕战败,我们又有救秦之名,趁其撤退时还可攻击取利。"拓跋嗣不听,以司徒长孙嵩督山东诸军事,遣步骑10万屯黄河北岸,以待晋军。
刘裕水军入河后,见魏军沿河活动,深感忧虑。于是命王镇恶等人前来。他打开船窗,指着河边的魏军说∶"我告诉你们攻克洛阳后,等大军齐至才进攻,现在轻易进兵,又多出魏国敌军,我又该怎么分兵布将?"此时,魏军一路随行,在北岸一直跟着刘裕的船队走。晋兵凡有小船因大风漂浮到北岸的,尽被魏兵箭射枪捅,一个不剩。每当刘裕派军去追,晋军刚上岸,北魏骑兵马快,顿时转移了。晋军撤回到船上,魏军就又冒了出来,继续跟着船走。
同年五月间,刘裕想出一招,他派七百兵士,给以兵车百乘,渡北岸,在离河百余步的水边列开"却月阵"——"两端抱河,车置七仗士,事毕,使竖一白联(相当于令旗)"。魏军看不明白,不知晋军演什么戏,都立于原地不动。突然,一直待命未发的晋朝宁朔将军朱超石见白联摇动,便率两千晋军疾趋上岸。他共带100张床弩,每车站列20甲士,左右前后列大盾掩护,组成一种看上去非常奇怪的兵阵。魏军见晋军列阵完毕,便也列阵迎前。魏军统帅长孙嵩,亲率3万骑兵在步兵后面作后援,从四面八方冲杀过来。
忽然,晋军强弩齐发。魏军不顾生死,虽然前面的士兵一排排被射死,后面的士兵仍喊杀声阵阵,冲势不减。关键时刻,朱超石使出早就准备好的秘密武器——几百把大锤以及一千多长稍。晋军先把长稍从中间的木杆折成两段,只长三四尺,然后,一名兵士持稍前立装填,后面兵士用大锤猛击弩机柄端。待魏兵蜂拥而至,弩机猛力发射,一稍就穿死三四个人。魏兵不能挡,一时奔溃,死者相积。魏军大将临阵被斩,余众退至畔城。晋军乘势追击,一路追杀,斩魏国兵将数千。
魏主拓跋嗣闻言,才知晋兵勇猛,后悔不用崔浩之言。由此,魏军再也不敢轻犯晋军兵锋,刘裕顺利抵达洛阳。如此危急时刻,后秦军屡败不说,最重要的御敌统帅鲁公姚绍,又因忧急愤懑,发病吐血而死。八月,刘裕至陕地。沈田子、傅弘之入武关,进踞春泥(今陕西蓝田)。
沈田子等人将攻晓柳。秦主姚泓至此横下一条心,御驾亲征。他率马步数万大军,想与刘裕主力正面决战,但又怕沈田子东晋军从后掩袭,便想击灭沈田子后,再东出与刘裕交手。沈田子一部,本来就是迷惑后秦军的"疑兵",总共1000多人。忽闻探报,姚泓自率数万大军马上就到,沈田子就要提兵前去相斗。傅弘之持重,劝说兵力寡殊太大,想要退兵。沈田子认为敌我双方人数相差太远,等敌军固列阵形,想逃也来不及。不如先发制人。沈田子转身对士兵们讲∶"诸军冒险远来,正求今日之战,生死一决,可以一战封侯!"晋兵闻言,皆踊跃鼓噪,手执短兵,高呼奋击后秦军。就在后秦军毫无防备的时候,忽然从树林中冲出晋兵,秦兵惊慌失措,转身而逃。大败之下,被东晋兵斩杀1万多人。姚泓奔还灞上,其御用乘舆仪仗皆为东晋军所缴获。
王镇恶攻潼关坚城不下,便向刘裕请示,要转率水军自黄河入渭水,直袭长安。王镇恶所领的晋朝水军,都乘朦幢小舰,兵士皆藏于船内向下划桨。后秦士兵没见过此种船只,他们只看见船走而不见有人外露摇桨划船,皆惊以为神。王镇恶一军至渭桥后,立刻下令兵士在船上吃饭。然后,持杖登岸,严令"后登者斩"!士兵上岸后,小船无缆无锚,渭水迅急,瞬间全部顺水飘走,一只船也没剩下。
王镇恶对将士们说∶"大家的家属都在江南,这里是长安北门,离家乡已是万里之遥。船舰衣粮,皆随流飘没。今进战而胜,则功名俱显。不胜,尸骨无存!"言毕,王镇恶身先士卒,第一个向前冲杀。他身后晋兵立于绝境,勇气倍增,无不以一当十,冒死直前。后秦将姚丕前来抵拒,被杀得大败。后秦主姚泓闻讯,自领兵卒前往,正赶上姚不败军溃还,一时践踏拥推,死伤无数。大败之下,姚泓单马还宫。王镇恶军攻入长安平朔门。
姚泓惶恐无计,与宫内的家人商量,想出宫投降。其子姚佛念时年十一,对父亲说∶"晋人将逞其欲,肯定不会让我们活命,还不如我们先行阖家自尽!"姚泓抚然不答。姚佛念说完登上宫墙,投地而死。
姚泓无奈,只得率妻子数人步行至城门的刘裕大营中投降。姚泓之弟姚赞,随后也带着宗室100多人来降。
此时,刘裕立刻把除姚泓以外的所有后秦宗室、妇女全部就地处决,血满营盘。接着,他用槛车押送姚泓到建康,斩于闹市之中,以彰功名。姚泓死年三十,在位两年。从姚苌算起,后秦共历三世,共三十二年。
后秦至此终结。而对于刘裕来说,这两次北伐,连灭两国,他的丰功伟业是东晋数百年来所未有的。当时东晋内主政的刘穆之病故,刘裕担心变故,急忙率军回朝。匈奴的赫连勃勃见刘裕率军回朝,便乘虚而入,攻杀了留守长安的守将,此次北伐的成果竟化为乌有。然而,此时的刘裕取晋而代之之心已经很明显。当他回朝之后,他的帝王大业也很快变成现实。