秦将军姚益男、阎生等人听说洛阳已经失陷,不敢进军,退到关中。秦廷惶恐得很,可是,并州牧姚懿到陕津后,听信司马孙畅的计策,反而攻打长安。秦主姚泓急忙令东平公姚绍攻打姚懿,姚懿战败被擒,司马孙畅也被诛杀。不久,征北将军齐公姚恢又自称大都督,借口保护君主,向关西进军。秦主飞召姚绍率军攻打姚恢,姚恢战败而死。姚懿、姚恢都是秦主姚泓的亲族,国难当头,却倒戈相向,姚氏至此还能保全国家吗?虽然叛贼已经除掉,但秦兵已伤亡过半。
晋太尉刘裕令三子彭城公刘义隆据守彭城,兼管徐、兖、青、冀四州军事,然后亲自率水师西进。
王镇恶攻入渑池,趋往潼关;檀道济、沈林子自陕北渡过黄河,进攻蒲阪。此时,秦东平公姚绍已经升任鲁公,官居太宰,他带着武卫将军姚鸾等人,率领五万士兵支援潼关,并派副将姚驴援救蒲阪。沈林子见一时难以攻克蒲阪城,便对檀道济说:“蒲阪城坚兵多,恐怕难以攻陷,我们不如先去会合王镇恶,再合力进攻潼关。潼关一得手,蒲阪就唾手可得了。”檀道济依计而行,与王镇恶会师,合攻潼关。姚绍出城迎战,被檀道济等人杀得退守定城。
秦兵屡战屡败,秦主姚泓急得不知所措,忙派人向北魏主求援,并请妹妹西平公主即北魏夫人代为恳请。北魏主拓跋嗣正想发兵,碰巧刘裕逆流而上,向西进军,发来借道的信函。北魏主左右为难,不得不召集众臣商议。朝臣齐声说:“潼关号称天险,刘裕用水师攻打潼关,肯定很难得胜,如果他们登岸北犯,却容易得多。况且刘裕虽然声明是讨伐后秦,但谁也无法预料,他明天会不会来攻打我们。我朝又与后秦是姻亲关系,更应相救,还请陛下立即发兵驻守上游,阻止刘裕军西进。”只有崔浩不赞成,朗声说:“不行!不行!刘裕早就想攻打后秦,如今姚兴已死,他的儿子姚泓又懦弱无能,国家多灾多难,势已危蹙,刘裕大举入秦,志在必得。我朝如果阻遏了他的去路,刘裕必定记恨我朝,上岸北侵,到那时局势一变,我朝竟代后秦受敌!不如放刘裕军过去,听凭刘裕军西上,然后发兵塞住东路。刘裕如果取胜,必定感谢我朝,决不会与我朝为敌;如果他战败,我朝也有救秦的美名,这才是一举两得的上策。况且南北风俗迥异,就算我朝放弃恒山以南的地方,任由刘裕占据,他也不能驱散吴越士卒,与我朝争夺河北的地方,刘裕军不足为患。”
北魏主十分犹疑,见朝臣大多坚持阻遏刘裕军,夫人拓跋氏也不断恳请,他便令司徒长孙嵩督率山东士兵,与将军娥清、刺史阿薄干屯驻河北岸。只要有晋军的船只由南岸漂到北岸,不管是什么原因,魏军一概杀掠。刘裕大怒,立即派人去北岸痛击魏军,狠狠地给了魏军一个教训。魏主得知,万分后悔。
那时,潼关的驻兵因为没有粮草越来越喧嚣。王镇恶想率军撤退,沈林子拔剑击案道:“如今洛阳已经平定,关右也即将荡平,将军怎么能自挫锐气,前功尽弃?况且将军率领的前锋是全军的耳目,前锋一退,后军必乱,那时就别想取胜!”王镇恶于是派使者赶往后军,请求刘裕接济粮草。刘裕曾经叮嘱王镇恶等人静待洛阳,等大军到了,再齐头并进。哪知王镇恶贪利邀功,竟然不听军令,径直趋往潼关。对此,刘裕已十分不满,再加上当时他正与魏军交战,无暇顾及,于是就令使者回去告诉王镇恶无粮可济。王镇恶只得亲自到弘农劝谕百姓,让他们输送粮草。部队得到百姓输送的粮草后,逐渐安定下来。沈林子又击败河北的秦军,阵斩秦将姚洽、姚墨蠡、唐小方,派人向刘裕报捷说:“姚绍气盖关中,如今却一蹶不振,性命垂危,我军不动一兵一卒就能取胜了。姚绍一死,关中就没有几个挑大梁的人了,那时我军攻取长安易如反掌!”果然不到几天,姚绍愤懑成疾,呕血而亡。临死前,姚绍把军事托付给东平公姚赞,姚赞轻率出兵偷袭沈林子,结果被沈林子打得落荒而逃。
不久,沈田子、傅弘之攻入武关,进驻青泥。秦主姚泓亲自率数万大军去攻打沈田子,却禁不起沈田子麾下一千多名骑兵轻轻一扫。秦主姚泓从来没有遇到过劲敌,突然见到这么勇悍的晋军,不由得魂飞魄散,掉头就逃。主子一逃,全军立即溃散,沈田子一阵追杀,削掉一万多颗脑袋。
刘裕到了潼关,正担心沈田子兵少,急忙命令沈林子率领数千精兵赶去支援。到了青泥,秦主已经败退,二沈一同追击而去。关中郡县多望风迎降。捷报陆续传来,刘裕大喜。
将军王镇恶也在刘裕的应允下,率水军进逼长安。秦主姚泓屯兵逍遥园,令姚赞屯驻灞东,胡翼度屯驻石积,姚丕屯驻渭桥。王镇恶逆流直上,所乘坐的战舰都是蒙冲小舰,水手都在舰内。秦军见晋船行驶如飞,却没有一个水手,都吃惊地以为晋军有天神相助。到了渭桥,王镇恶等士兵吃完饭,便传令军中:“各将士带上武器立即登岸,落后者立斩!”众将士得令后,火速登岸,战舰都随水漂去,不知所向。王镇恶对众将士说:“我们世代居住江南,如今来到离家万里的长安,舟楫、衣粮都已随水漂没,如果这一仗得胜,功名利禄全不在话下;否则就死在他乡,骸骨都不能够回归故里。我愿与你们齐头并进,生死与共!”众人齐声应命,声震如雷。王镇恶身先士卒,冲向敌军,部众也竞相上前,奋击姚丕。姚丕军大败,向西奔逃。
冒冒失失的秦主姚泓率兵前来支援,却遇到败退的姚丕军,两军自相践踏,不战即溃。王镇恶追杀过去,乱杀乱剁,就像割草一样。秦镇西将军姚谌、前军将军姚烈、左卫将军姚宝安等人都死在战场,只有秦主姚泓一人逃回京都。王镇恶追入平朔门,姚泓带着妻儿逃往石桥。姚赞率部众赶去救驾,不料部众都溃散而去,胡翼度也向晋军投降。晋军在石桥将姚泓团团围住,姚泓束手无策,只好送款求降。姚泓十二岁的儿子姚佛念哭着对父亲说:“陛下想要向晋军投降,但晋军必定不会就此罢休,陛下终究难免一死,还是请自裁吧!”姚泓不愿。姚佛念当即从宫墙上面一跃而下,脑裂身亡。姚泓率妻儿及群臣来到王镇恶军营前请降,王镇恶将他们一群人监禁起来,等候刘裕处置。
几天后,刘裕率领大军进入长安城,王镇恶赶到灞上迎接刘裕军。刘裕当面慰劳他说:“我的霸业得以成就,你立了首功!”王镇恶拜谢说:“这全仗您的威灵和各将士的齐心努力,我王镇恶何功之有啊?”刘裕笑着说:“你这样谦虚,是要学汉朝的冯异吗?”随即与王镇恶一起入城。后来,王镇恶盗取府库里的钱财,违反军纪,刘裕也置若罔闻。秦镇东将军平原公姚璞与并州刺史尹昭在蒲阪投降,抚军将军东平公姚赞率姚氏子弟,共计一百多人,也向晋军投降。刘裕不肯赦免,将他们一律处斩,并将姚泓押入都城,斩首示众。