元狩二年(公元前121年),为打通河西走廊的通道,打击匈奴右贤王,以切断匈奴右臂,汉武帝发动了第二次具有重大意义的大规模出击匈奴的战役。这次战役是由霍去病指挥的。这年五月,汉武帝任命霍去病为骠骑将军,率领一万多骑兵从陇西出发远征匈奴。过焉支山(今甘肃永昌县西、山丹县东南),沿祁连山峡谷西进,深入匈奴休屠王领地一千多里,转战六日,在娄兰山下与匈奴展开决战,汉军大获全胜,杀死敌人一千多,并缴获休屠王祭天的金人,给了匈奴沉重的打击。汉武帝很高兴,为纪念这次胜利,把休屠王祭天的金人当作大神供列在甘泉宫。夏天,匈奴出兵侵犯汉代郡、雁门一带。这次,汉武帝采取了两翼作战的方针,命博望侯张骞率军万骑、李广率军四千骑从右北平(今辽宁凌源)出发,分道迎击匈奴左贤王,开辟东线战场;霍去病和公孙敖各率万骑分别从陇西、北地出发,开辟西线战场。
李广率骑兵四千为先锋,开在大部队前方约几百里地,张骞率骑兵一万多人殿后。匈奴左贤王率骑兵四万,将李广率领的先头部队团团包围。李广的军士被围,都感到十分害怕,李广便命自己的儿子李敢独自率领几十名骑兵直入敌阵,从敌阵左右冲出后返回。回营后李敢当着全军的面向李广报告说:“匈奴兵很容易对付。”军士的情绪才安定下来。李广命部下的将士向着敌军排成圆形阵营。匈奴兵向汉军阵地发起猛烈进攻,箭如雨下,汉军士卒伤亡过半,箭也快用尽了。
李广便命令部下拉满弓弦,但不发射,他亲自用特大的黄色强弓射匈奴将领,李广一连射死匈奴将领好几人,敌人的攻势才渐缓下来。这时天色已晚,汉军将士全吓得面无人色,只有李广神情自若,加紧巡视阵地,调整部署,全军上下全都钦佩他的勇气。第二天,汉军再次奋力与匈奴兵激战,虽然伤亡大半,但消灭的敌人却超过己方的损失。这时,张骞的大军赶到,匈奴军才撤围而去。汉军疲惫,无力追击,于是撤兵而回。根据汉朝的法律,博望侯张骞由于行动迟缓,贻误战机,应处死,赎身后成为平民。李广功过相抵,没有封赏。骠骑将军霍去病深入匈奴二千多里,与公孙敖率领的部队失去了联系,未能会师。但霍去病率领部队跨越居延海,经过小月氏,到达祁连山,生擒单桓、酋涂二王,匈奴丞相都尉率部下二千五百人投降汉军,汉军斩杀匈奴三万零二百人,俘获小王七十多人。于是汉武帝增封霍去病食邑五千户,封其部下有功将领鹰击司马赵破奴为从骠侯,校尉高不识为宜冠侯,校尉仆多为辉渠侯。合骑侯公孙敖因为中途逗留,贻误军期,未能与霍去病会合,本应处斩,赎身后为平民。
当时汉军中资格老的将领们统帅的将士、马匹、兵器都没有霍去病军中的精良,而老将们经常因迟留落后而不能立功。因此,霍去病越来越受到宠信尊重,和大将军卫青差不多。
具有重大意义的祁连山之战,沉重地打击了匈奴的右部,匈奴内部也由此产生了矛盾。这年秋天匈奴伊稚斜单于因浑邪王居西部而屡次被霍去病军打败,损失了数万人和大批财物,于是怪罪于浑邪王和休屠王,准备将他们召到单于庭,杀掉他们。
浑邪王和休屠王感到害怕,打算投降汉朝。于是先派人在边境拦截经过当地的汉人,让他们向武帝报告。当时,大行李息正在黄河边筑城,见到浑邪王的使者后,便派传车急速去报告朝廷。汉武帝听到这一消息,怀疑他们是用诈降手段准备偷袭边塞,便命霍去病率兵前往迎接。休屠王因后悔向汉朝投降,浑邪王将他杀死,兼并其属下部众。霍去病渡过黄河之后,与浑邪王所带领的部队遥遥相望。浑邪王部下将领见到汉军后,很多人不愿投降,于是纷纷想逃走。霍去病便纵马驰入浑邪王大营,与他相见,将其部下企图逃跑的八千人全部杀死,又派浑邪王一人乘传车到汉武帝所居之处,同时命其部下全部渡过黄河。投降的共四万多人,号称十万。浑邪王到长安后,汉武帝赏赐他几十万两黄金;封浑邪王为漯阻侯,食邑一万户,其部下小王呼毒尼等四人全都被封为列侯。又加封霍去病食邑一千七百户。
浑邪王归降时,汉朝征调车辆二万乘前往迎接,但因朝廷没有钱,只得向民间赊购马匹。有的老百姓将马匹藏匿起来,结果马不够用。汉武帝非常生气,要杀长安县令,右内史汲黯说道:“长安令没有罪,只有将我杀了,老百姓才肯交出马匹。再说,浑邪王投降我朝,我朝只须从容地按着县的顺序传送,何至于使天下不安,使中原贫困,来奉承异族呢!”汉武帝默然,没有应答汲黯。及至浑邪王等来到长安,当地商人因与他们做买卖而犯死罪的达五百多人。汲黯请求汉武帝闲暇时在未央宫高门殿接见他。汲黯见了汉武帝后向他奏道:“匈奴攻击我沿边道路上的要塞,拒绝和亲,我朝兴兵征讨,死伤不可胜数,费用高达几百万。我原以为陛下得到匈奴人,一定会将他们全部作为奴婢,赏赐给那些牺牲在战场上的将士之家,所缴获的财物,也一并赏赐,用来酬谢天下人的痛苦,使百姓心满意足。如今纵然做不到,也不能因浑邪王率几万人前来归降,就用尽国库财富来赏赐他们,征调百姓服侍、奉养他们,好像供奉骄横的儿子一般。那些无知的百姓怎么知道在长安城中做买卖,竟会被官吏以犯有使财物非法流出边关的罪名抓起来治罪呢?陛下既不能用匈奴的财物答谢天下,又凭法令中一项不重要的条文杀死无知小民五百多人,这与为保护树叶而伤害树枝,无异。我觉得陛下这样做是不对豹。”汉武帝沉默不语,没有应许。后来说道:“我很久没听到汲黯的声音了,如今他又在这里胡言乱语了!”
不久,汉武帝将归降的浑邪王部属分别迁徙到沿边五郡的旧要塞之外,让他们全部住在黄河以南,保持他们原有的风俗习惯不变,设立了五个属国。从此,金城河西岸、傍南山直到盐泽一带,便没有匈奴人了,即使是匈奴探马也不多见。
休屠王太子日磾和他的母亲阏氏、弟弟伦都被罚为官府奴隶,派到属于少府管辖的黄门养马。这之后很久,一次汉武帝在游乐饮宴之时查看马匹,他的身边站满了后宫的美女,日磾等几十人牵马从殿下经过,没有人不偷偷窥视,而唯独日磾经过时不敢偷看。日磾身高八尺二寸,容貌十分庄严,所养的马匹又非常肥壮,汉武帝感到惊奇,召他上前询问,日殚便将自己的身世一一奏告。汉武帝听了之后对他另眼相看,当日匣让他洗澡、赐给衣帽,任命为马监,后又升为侍中、驸马都尉,一直作到光禄大夫。日磾受到皇帝宠爱,从来没有犯过过失,汉武帝对他十分信任,赏赐累计过黄金千斤,出门时让他陪乘,回宫后让他侍随在左右。很多皇亲国戚都私下抱怨说:“皇上不知从哪儿找来个胡儿,竟然当成宝贝。”汉武帝听到后,却愈加厚待日磾。因为休屠王曾制造金人用来祭祀天神,所以汉武帝赐日殚姓金。
浑邪王率领部众归附汉朝以后,河西就再也没有乱兵侵扰。金城河西并南山(祁连山)至盐泽(今罗布泊),匈奴人消失贻尽。武帝以其旧地设置武威(今甘肃民勤)、酒泉郡,元鼎六年(公元前111年)又分其地设置张掖、敦煌郡。从此以后,汉朝的防线大大向西推进,切断了匈奴与羌人的联系,打破了汉朝被匈奴、羌人包围的局面,打通了与西域联系的河西通道,切断了匈奴右臂,巩固了第一次战役的成果。汉朝的西部压力至此解除,特别是陇西、北地、上郡一带的百姓负担因此大大减轻。武帝决定:“减陇西、北地、上郡戍卒之半,以宽天下徭役。”河西一带,水草丰美,匈奴失掉河西,经济上造成了很大的损失,匈奴人唱道:“失我祁连山,使我六畜不蕃息;失我焉支山,使我嫁妇无颜色。”