太和三年(229年),蜀相诸葛亮第三次出兵攻魏,并占据武都(今甘肃陇南武都区)、阴平(今甘肃文县西北)二郡。太和四年(230年),魏明帝曹叡决定兴师伐蜀。升司马懿任大将军、加大都督、假黄钺,与大司马曹真一起伐蜀。八月,魏明帝命曹真率主力由长安入子午谷,左将军张郃出斜谷,司马懿自荆州溯汉水出西城,将兵分三路会攻汉中。司马懿从西城开拓道路,水陆并进,沿着沔水逆流而上,直达朐忍,攻克新丰县,驻军丹口,后遇大雨班师。太和五年(231年)二月,诸葛亮率军第四次北伐魏国,包围祁山贾嗣、魏平部,并以木牛流马运输粮草,曹叡派司马懿西驻长安防御蜀军。司马懿留部将费曜、戴陵率4000人守邽,自率主力西救祁山。张郃劝司马懿分兵驻扎雍、郿两地,以作大军后镇,司马懿不同意。挺进喻麋,对战诸葛亮。诸葛亮力挫魏军。张郃不听司马懿劝告,主动出击,“诏郃督诸将西至略阳,(诸葛)亮还保祁山,郃追至木门,与亮军交战,飞矢中郃右膝,薨。”青龙元年(233年),安定保塞匈奴大人胡薄居姿职等叛,司马懿派遣胡遵等追讨并破降。蜀军退军后,军师杜袭、督军薛悌都预计诸葛亮第二年麦熟时还会入侵,建议趁冬天调运粮草,解决陇右粮少问题。司马懿认为:“诸葛亮两次出祁山,一次攻陈仓,都受挫而返。即使以后他还会出兵,将不再攻城,而是寻求野战,地点必在陇东,而不会在西侧。诸葛亮常以粮少为恨,回去后必然广积粮草,我估计没有三年的积蓄,诸葛亮是不会贸然出兵北伐的。”
青龙二年(234年)二月,蜀相诸葛亮率军十万出斜谷伐魏。四月,诸葛亮至郿县(位于今陕西宝鸡),进驻渭水之南。司马懿率军渡渭水,背水筑垒阻击。诸将想在渭北与诸葛亮隔水相持,司马懿说:“百姓积聚的粮秣财物都在渭南,这是必争之地。”遂渡渭水背水扎营。当时,司马懿屯兵渭南,郭淮估计诸葛亮一定会争夺北原,主张先去占领北原,司马懿说:“如果诸葛亮跨过渭水登上北原,就可以连兵北山,断绝陇道,震慑我朝臣民和胡人,此乃国家安危之大患。”很多人不以为然,但司马懿认为如此,让郭淮屯兵北原。不久,诸葛亮率大军西行,诸将都认为诸葛亮想攻西围。郭淮则认为,诸葛亮虚张声势是要让魏军大举回应,而他的目标是阳遂。夜里,蜀军果然进攻阳遂,因城中早有防备,诸葛亮没能成功。五月,十万吴军攻魏,配合蜀军作战,被满宠所拒。七月,魏明帝曹叡率兵亲征,吴军撤兵。群臣认为司马懿正还在西边和诸葛亮重兵对峙,车驾可西幸长安,魏明帝则说:“孙权大军已经撤回,诸葛亮孤军无援、难成气候,大将军司马懿足以抵挡,我没有什么忧虑了。”诸葛亮东进的道路受阻于司马懿,从渭水前进,又有郭淮阻挡,于是移军攻取大散关、陇城等地,回师进攻司马懿。八月,司马懿以“坚壁拒守,以逸待劳”的指示,与诸葛亮相持百余日。诸葛亮数次挑战,司马懿均坚壁不出,以待其变。诸葛亮便派人给司马懿送去妇人的服装,欲激司马懿出战,司马懿仍不出战。为平息部属不满情绪,司马懿故意装怒,上表请战。曹叡不许,并派骨鲠之臣辛毗杖节来做司马懿的军师,以节制他的行动。诸葛亮一来挑战,司马懿就要带兵出击,辛毗杖节立于军门,司马懿便不出兵。蜀将姜维就对诸葛亮说:“辛毗杖节而至,司马懿不会出战了。”诸葛亮则说:“彼本无战情,所以固请战者,以示武于其众耳。将在军,君命有所不受,苟能制吾,岂千里而请战邪!”
诸葛亮遂分兵屯田,做长久屯驻之准备。司马懿的三弟司马孚也来信问前线军情,司马懿回信说:“亮志大而不见机,多谋而少决,好兵而无权,虽提卒十万,已堕吾画中,破之必矣。”不久,诸葛亮遣使求战,司马懿不谈军事,问使者:“诸葛公起居饮食如何,一顿能吃多少米?”使者说:“三四升。”然后对问政事,使者说:“打二十军棍以上的处罚,都是诸葛公自己阅批。”经过一番不经意的询问,司马懿对人说:“诸葛亮将要死了。”果然,诸葛亮于当月病故于五丈原军中。蜀将秘不发丧,整军后退。当地百姓跑来报告,司马懿派兵追击,蜀将杨仪返旗鸣鼓,做出回击的样子,司马懿以‘穷寇莫追’收军退回。当时有人传:“死诸葛走生仲达”,司马懿听到笑说:“这是因为我长于预测活人的事,不长于预测人的生死啊。”第二天,司马懿到诸葛亮营垒巡视,并赞诸葛亮“天下奇才也”。青龙二年(234年)八月,诸葛亮病故于五丈原(宝鸡岐山境内),享年五十四岁。历时七年的诸葛亮北伐至此结束。蜀汉将领杨仪、魏延在撤军后争权,杨仪杀死魏延。司马懿想乘机攻蜀,魏明帝未准,作罢。青龙三年(235年),司马懿升任太尉,累增封邑。蜀将马岱入境侵扰,司马懿派牛金迎击,斩蜀军千余人。武都氐王苻双和强端率领其属下六千余人来降。
东汉末年军阀混战时,公孙度据有辽东。这个割据势力对曹魏一直时叛时降,保持着半独立的地位。公孙渊继为辽东太守后,对魏更加不逊。魏明帝震怒,派荆州刺史毌丘俭出任幽州刺史,时辽水大涨,毌丘俭不利而还。毌丘俭讨伐受阻,使公孙渊更加得意。景初元年(237年),原魏辽东太守公孙渊背叛魏国,自立为燕王,置列百官,定都襄平(今辽宁辽阳)。[3]公孙渊遣使南通孙权,封拜边民,诱呼鲜卑,侵扰北方。景初二年(238年)当年正月,司马懿率牛金、胡遵等步骑四万,从京师出发,经孤竹,越碣石,六月,进至辽水。公孙渊急令大将军卑衍、杨祚等人率步骑数万,依辽水围堑20余里,坚壁高垒,阻击魏军。司马懿采用声东击西之计,先在南线多张旗帜,佯攻围堑,吸引敌军主力,而以主力隐蔽渡过辽水,逼进敌军的襄平本营,部将不解问其原因。司马懿说:“敌人坚营高垒,就是想让我们兵疲粮尽,若攻城,正中其计。古人曰,敌虽高垒,不得不与我战者,攻其所必救也。现在他们大军在此,老巢却空。我直指襄平,敌军必惧,惧而求战,破之必矣”。接着整顿阵列前进,敌军果然出来截击。司马懿对诸将说:“我之所以不攻其营,正是要等现在的局面。”于是指挥魏军痛击,三战皆捷,遂乘胜进围襄平。
当初公孙渊闻魏军来攻,求救于孙权,孙权也出兵为其声援,并给公孙渊写信:“司马懿善用兵所向无前,深深为贤弟感到担忧啊。”适逢连降大雨,辽水暴涨,平地数尺,魏军恐惧,诸将思欲迁营。司马懿下令有敢言迁营者斩,都督令史张静违令被斩,军心始安。公孙渊军乘雨出城,打柴牧马,安然自若。魏将领请求出击,司马懿不允。司马陈圭曰问司马懿:“当年攻上庸,八路并进,昼夜不停,故能在一旬半时间里,攻下坚城,杀了孟达。这次远道而来,为什么行动却更加缓慢?”司马懿说:“当年孟达军队少而粮食能支持一年,我们的军队是孟达的四倍,粮食却不足一月,以一月粮的军队对付有一年粮的军队,怎能不速战速决?以四攻一,即使一半人伤亡,也是可行的,当时不计死伤,正是要为有限的粮草争取时间。而今敌兵多我军少,敌粮少我粮多,又遇大雨,想速战也不可能。从出兵开始,我就不担心敌人来进攻,而是怕他们会逃跑。如今敌军粮草将尽,我军包围尚未合拢,若现在抢掠牛马,会逼他们逃走。兵者诡道,善因事变。他们凭借人多和大水,虽然饥困,也不肯就擒。这时候更当稳住对方,不能为得小利而把敌人吓跑。”司马懿将计就计,故意示弱。朝廷听说雨大敌强,不少人请求召还司马懿。魏明帝却说:“司马懿临危制变,生擒公孙渊指日可待。”
月余,雨停,水渐退去。魏军完成对襄平的包围,昼夜强攻。城内粮尽,死者甚多,其将杨祚等降。当时城中愈发震恐,公孙渊也很惊惧,八月,公孙渊派相国王建、御史大夫柳甫请求解围,司马懿斩杀使者,发布檄文严责。公孙渊又派侍中卫演来请求定日期送人质,司马懿拒绝人质。公孙渊欲从城南突围,司马懿纵兵击破其军,公孙渊战死在梁水边上。入城后,司马懿下令屠杀十五岁以上男子七千多人,收集尸体,筑造京观。而后他又把公孙渊所任公卿以下一律斩首,杀死将军毕盛等二千多人,收编百姓四万户。
司马懿释放了当年被公孙渊篡夺官位的公孙恭,又为被公孙渊迫害的纶直、贾范等人修了坟墓,表彰他们的后代。下令说:“古代讨伐一个国家,仅杀其中顽固凶恶的人而已。各位被公孙渊所连累的人,全部宽恕。中原人愿意返回故乡的,各随己愿。”当时司马懿军中有的士兵衣单寒冷,请求发给短袄,司马懿不给,表示“襦者官物,人臣无私施也”。于是上奏朝廷,把一千多名六十岁以上的士兵解除兵役,送返回乡。在原定一年的期限内,胜利班师。魏明帝派使者到蓟去犒劳部队,增司马懿食昆阳县,前后共二县。曹魏数十年来辽东问题终于彻底解决。