於謙分遣諸將率兵二十二萬列於京師九門之外,皆受石亨節製。於謙把兵部日常事務交侍郎吳寧處理,自己親自至德勝門石亨軍營,以抵禦瓦剌的主攻部隊。初九日下令“有盔甲軍士但今日不出城者斬。”等到各部軍隊皆出至城外部署完畢後,把所有的城門都關上,以示背城死戰的決心。下令“臨陣,將不顧軍先退者,斬其將;軍不顧將先退者,後隊斬前隊。”於謙自己則身先士卒,躬擐甲胄,“以示必死,泣以忠義諭三軍,人人感奮,勇氣百倍”,準備迎擊瓦剌軍。
十月十一日,瓦剌軍騎兵直撲北京城下,列陣西直門外,置英宗於德勝門外空房中看守。當天明都督高禮、毛福壽在彰義門北襲擊瓦剌軍,殺敵數百人,奪回被掠民眾千餘人。也先看到明軍陣容嚴整,不敢貿然進攻。叛閹喜寧就唆使也先要明朝派大臣迎接英宗,借議和試探明王朝的虛實。明朝知其詐,不派大臣迎駕,以通政使參議王複為右通政,中書舍人趙榮為太常少卿帶著羊酒出城到也先營去見英宗朱祁鎮。也先讓英宗帶刀坐帳中,自己和伯顏帖木兒等皆全副武裝,披甲胄張弓矢,引王複、趙榮進見。也先不受羊酒,取看番字公文,朱祁鎮看漢字公文。也先對王複等說:“你們這些小官,可令胡潑、於謙、王直、石亨、楊善等來,”並索取大量金帛財物。景帝和一些廷臣有些動搖,想議和,派人去問於謙。於謙回答:“今日止知有軍旅,它非所敢聞。”於謙的堅定態度,使景帝放棄了幻想,君臣協調一致挫敗了也先的訛詐陰謀。
十三日,也先率兵發起總攻。於謙、石亨率明軍與敵激戰於德勝門外,瓦剌軍進抵北京城下後,曾派遊騎到德勝門窺探明軍軍情,於謙判斷瓦剌軍可能要從這裏進攻,指示石亨預設伏兵於路旁空房之內,而派少量騎兵誘戰,旋佯裝敗退,瓦剌軍以萬騎尾追,待瓦剌軍逼近時,神機營火銃、火炮一齊向敵射發,同時石亨伏兵驟起,前後夾攻,也先軍驚憂,明軍副總兵範廣驍勇絕倫,躍馬當先,衝入敵陣,部下將兵齊力殺進。瓦軍大敗於城下,死傷無數,也先弟弟平章孛羅卯那孩,素有“鐵元帥”之稱,也在搏戰中被範廣所部的大炮擊斃。瓦剌軍轉攻西直門,都督孫鏜率軍迎擊,瓦軍稍向北退,孫鏜追擊,瓦剌軍增援反撲,孫鏜軍拚力血戰。明軍高禮、毛福壽等率兵從南麵助戰,激戰更急。戰陣漸逼近城門時,城上守將程信急發箭炮助戰,會石亨領兵又從北麵趕到,瓦剌軍三麵被圍攻,才向西南退去。
這次戰鬥後,於謙根據戰鬥中暴露出來的一些問題,重新作了部署,加強了西直門和彰義門之間的軍事力量。命都督毛福壽等在京城外西南街巷要路,堵塞路口,埋伏神銃短槍,以待策應。派僉都禦史王竑往毛福壽、高禮處提督軍務,與孫鏜一處屯兵。並要他們與彰義門方麵加強聯係,遇有緊急情況,互相應援,不許自分彼此,貽誤軍機。瓦剌軍在德勝門和西直門遭到挫折後,就在彰義門組織進攻。於謙命副總兵武興、都督王敬、都指揮王勇率軍往彰義門迎戰瓦剌軍。明軍俱以神銃列於前,弓矢短兵次之,挫敗了瓦剌軍的前鋒。但這時明方麵有數百騎想要爭功,自後躍馬衝出,衝亂了陣營,瓦剌軍乘機反擊,明軍敗退,武興中流矢死。瓦軍追到土城,土城一帶的居民紛紛爬上屋頂,以磚石為武器,鋪天蓋地般的投擊敵人,喊殺聲震天動地,瓦剌軍受到阻遏。王竑、毛福壽也聞訊趕來支援,瓦剌軍看到援軍的旗幟,不敢戀戰,倉皇退去。
這次也先率瓦剌軍深入京畿,原以為明軍不堪一擊,北京旦夕可下。但經過五天的戰鬥,皆被擊敗,議和“迎駕”的詭計又未得逞,也先感到沮喪,瓦剌軍的士氣低落。明軍自接戰以來,屢獲勝利,士氣大盛。而攻居庸關的五萬瓦剌軍,因天大寒,明朝守將羅通,汲水灌城,冰堅不得近。經過七天的戰鬥,瓦剌軍的進攻都被擊退,羅通三次出關追擊,斬獲無數。也先又聽得明朝的援軍將集,恐斷其歸路,遂於十五日夜拔營北遁。也先擁挾著英宗先退,於謙偵察朱祁鎮已走遠,就命石亨等舉火發大炮轟其營,瓦剌軍死者萬餘人。於謙派石亨率軍追擊到良鄉以西,十月十七日也先擁英宗出紫荊關退去。十一月八日瓦剌軍退回塞外,京師宣布解嚴。
在於謙的指揮組織下,北京保衛戰取得了勝利,挫敗了瓦剌軍想奪取北京的野心,明王朝轉危為安。也先手中的英宗,由奇貨變成了空質。然而土木之敗給明軍造成的巨大創傷也不是短期內能恢複的。這樣,在北京保衛戰後的短暫和平時期裏繼續整飭武備,團結內部的任務,仍沉重地壓在於謙的肩上。但是那時,明內部不團結,這個任務的完成極為不易。
北京保衛戰後,一些大臣妒忌於謙,有意貶低保衛京城的戰績,有的人甚至羅織罪名,彈劾於謙。侍講學士劉定之直言不諱,彈劾於謙、石亨無功拜爵。而羅通則含沙射影,攻擊於謙等不懂軍事,忌賢妒能,持祿保位。羅通是於謙從寒微中識拔的人才,他的這番話怎不叫於謙心寒。國難當頭,重任在肩,於謙以身許國,團結好內部要緊,於謙計較不了這許多。在北京保衛戰結束後,景帝論功行賞,加於謙少保總督軍務時,於謙講了句擲地有聲的鏗鏘壯語:“四郊多壘,卿大夫之恥也,敢邀功賞哉!”於謙已把全心交給了國家,還何恤人言。