会稽郡内史谢琰是谢安的次子,谢安一共两个儿子,长子谢瑶早逝,因此他很看重这个二儿子。会稽郡内史的位置是个肥差,能坐上这个位置,并不是因为谢琰才能出众,而是因为他的出身门第。大敌当前,谢琰既不会动员人民,又不懂整饬军队,他手下有将领就劝他道:“贼寇就在不远的海边,他们不断加强对我们的监视,我们应该采取怀柔政策,让他们弃恶从善。”谢琰满脸不屑,说道:“苻坚当年有百万之众,还不是惨败淮南?孙恩只是个小毛贼而已,当初败逃海岛,怎么还可能再杀回来呢?即便他真过来了,老天爷也会要他的命。”
不久,孙恩带兵攻破上虞,进军到了邢浦。谢琰派遣参军刘宣之迎战,把孙恩打得大败。谢琰哈哈大笑道:“我所言非虚,毛贼不堪一击!”可是几天之后,孙恩又来攻打邢浦,这次谢琰军失利,孙恩乘胜前进。
隆安四年(400)五月三十日,孙恩率军抵达会稽郡,谢琰正准备吃饭,听闻消息,他放下碗筷,说道:“等我顷刻间消灭了这贼人,然后再来吃饭。”他跨上战马出城应战,但被打得惨败。这时候帐下都督张猛又临阵倒戈,用刀砍伤了谢琰的战马,谢琰跌落马下被杀死了,他的两个儿子谢肇和谢峻也同时遇害。谢琰终究也没能续写父亲谢安和堂兄谢玄的辉煌。
吴兴郡太守庾桓害怕城中百姓响应孙恩,命人杀死数千百姓。孙恩率军进攻临海郡,朝廷得到战报,十分震惊,派冠军将军桓不才、辅国将军孙无终、宁朔将军高雅之率军讨伐孙恩。
十一月,高雅之和孙恩在余姚遭遇,两军交战,高雅之不敌,属下被杀死十之七八。朝廷见状况不对,赶紧下诏,任命刘牢之为都督会稽等五郡诸军事,率军讨伐孙恩。老将一出果然不同,孙恩不敌,再度逃回舟山群岛。刘牢之到上虞驻扎,派刘裕率军守卫句章(今浙江宁波市江北区慈城镇),吴国(今江苏苏州市)内史袁山松修筑沪渎垒(竹栅),加强防护。
隆安五年(401)三月,孙恩又从海岛攻上大陆,向北逼近海盐,刘裕紧追不舍,在海盐原来的城池上构筑城池以作防守,但他的部队过少,时间一长还是会守不住。刘裕心生一计,他命人在夜间把军旗扯下,把精锐部队埋伏起来,唱起了空城计。第二天一早,城门大开,城楼上只看见数个老弱残兵,孙恩手下喊话,问刘裕他们哪里去了,楼上答话,说他昨天夜里已经偷偷溜走了。孙恩得到报告,命令部队即刻进城,他的手下都想抢占先机获取金银珠宝,于是都争先恐后往里冲,这时候,刘裕埋伏起来的部队杀出,孙恩大败。孙恩转向去进攻沪渎,刘裕又紧追而去。
海盐县令鲍陋派儿子鲍嗣之率一千多人去做刘裕的前锋,刘裕质疑这支部队的战斗力,令鲍嗣之殿后,鲍嗣之不愿。刘裕又布下疑兵之计,孙恩以为自己中了埋伏,赶紧撤退,这时候鲍嗣之追击,不敌孙恩军队,战死,孙恩又乘胜杀了回来,刘裕不敌,部队伤亡殆尽。刘裕一看退无可退,命令士兵不要慌乱,让他们蹲下去脱战死士兵的衣服。孙恩又被刘裕这招给弄晕了,愣了半天,犹豫着开始后撤,这时刘裕大呼一声,率军追击,孙恩败走,刘裕目的达到,率军返回。
孙恩攻陷沪渎,杀死了包括太守袁崧在内的四千多人。六月一日,他又率领十多万部队,乘坐一千多艘战舰,突然进攻丹徒(今江苏镇江市)。孙恩兵临建康北大门,晋廷震惊,司马元显下令戒严,文武大臣在省内昼夜办公,都不回家了,紧急商议对策。司马元显命冠军将军高素率军守卫石头城,辅国将军刘袭率军截断秦淮河注入长江的入口,丹阳尹司马恢之率军守卫长江南岸,冠军将军桓谦率军守卫白石,左卫将军王嘏守卫朝廷,又召豫州刺史谯王司马尚之进建康协同守卫。
刘牢之从山阴率军而来,准备截击孙恩,但孙恩抢先一步逃走,刘牢之扑了个空,只好急令靠北的刘裕从海盐驰援京师。当时刘裕部众不足一千人,他接到命令后星夜兼程,一刻也不敢休息,终于和孙恩的部队同时到达了丹徒。刘裕和众将士已经十分疲惫,但他们知道如果他们失败了,建康就将不保,于是又抖擞精神,投入战斗,喊杀声震天。孙恩部下的兵卒内心里已经充满了对刘裕的恐惧,两军一接触,孙恩军不敌溃散,掉入河中淹死的士兵不计其数。孙恩放弃了建康,从水路继续北上,攻击郁洲(今江苏连云港市东云台山一带),宁朔将军高雅之被擒,然后孙恩的部将又攻陷了广陵,杀死三千多人。
荆州刺史桓玄厉兵秣马,密切关注时局变化,他要求驰援京师,但司马元显对他很忌惮,见这时候孙恩也已经退走了,就命令桓玄原地待命。
朝廷下诏,任命刘裕为下邳太守,给他调派人马,让他率军讨伐占据郁洲的孙恩。刘裕连战连胜,孙恩又从水路南下,刘裕率军继续紧追。刘裕和孙恩在沪渎、海盐等地交战,孙恩军被俘虏、斩杀数万人,孙恩再度退回舟山群岛。
敢情孙恩生下来就是给刘裕练手用的,数战下来,刘裕屡战屡胜,孙恩屡战屡败,是孙恩成就了刘裕。
后孙恩又纠集部众,去攻击临海郡,被太守辛景击退,死伤无数。孙恩这下彻底绝望了,投海自尽。他的残余势力当时还有几千人,共同推举孙恩的妹夫、多才多艺的卢循为头领,据守海岛。