如果你用过Kali Linux,大概率经历过这样的场景:新装完系统,第一次执行apt update,进度条慢得像在等一个世纪,偶尔还报几个连接超时的错,尤其国内网络环境下等起来更明显。
所谓“Kali Linux 更换国内软件源”,就是把系统默认指向官方服务器的下载地址,换成国内高校或云厂商维护的镜像地址。Kali官方源服务器在国外,国内直连速度不稳定,换成清华、中科大、阿里这些镜像源之后,apt update和apt install的速度会直观地提升一个量级,很多时候能从“卡到想砸键盘”变成“秒下”。
这件事本身技术难度不高,但里面有几个关键点处理不好,很容易把系统搞出问题。比如源列表文件写错导致apt update报错,或者忘了同步签名密钥导致后续安装软件时校验失败。本文我会把换源涉及的基本原理、可选镜像、具体操作步骤,以及我实际踩过的一些坑一次性说清楚,帮你少走弯路。不管你是刚照着安装教程装好系统的新手,还是已经在用Kali做渗透测试的人,这套方法都通用。装完系统“顺手把中文输入法装上”之类的需求,本质上也要先依靠可用的软件源,所以这篇文章可以视为Kali折腾之路的第一块地基。
1. 为什么必须换源:先把软件源这件事弄明白
1.1 软件源到底是个什么东西
软件源(Software Repository)就是存放软件包和安装信息的远程服务器。Linux发行版普遍采用包管理器来安装和升级软件,Kali用的是APT(Advanced Package Tool)体系,核心命令就是apt install、apt update、apt upgrade这些。
那APT是怎么知道去哪里下载软件的呢?答案在/etc/apt/sources.list文件和/etc/apt/sources.list.d/目录下的.list文件里。文件里面一条条记录写的是软件源的地址。当你执行apt update,系统不是真的去下载所有软件,而是读取各个源服务器上的软件包索引文件,把这个源有哪些软件、什么版本、依赖什么这些元数据缓存到本地。之后执行apt install,再根据本地缓存的索引去对应的服务器拉取.deb安装包。
理解这一点很重要,因为很多人在换源时有一个误区:以为换源只是把下载安装包时的地址改一改。实际上apt update和apt install两个阶段的流量都要走软件源地址。如果源地址慢,索引更新阶段就会卡住,查不到软件列表,后续根本装不了东西。这就是为什么新装好的Kali在官方源状态下,经常出现apt update就卡在某个连接上不动。
1.2 为什么Kali官方源在国内这么慢
Kali Linux的上游服务器主要部署在境外,国内访问网络路径长、国际出口带宽又受限,高峰期延迟和丢包率让人头疼。而且Kali是滚动发行版(Rolling Release),软件包更新极频繁,每天都有大量包变动。如果你保持默认官方源,每次apt update都要拉取全量索引,速度慢的感觉会被放大很多。
此外还有一个隐藏痛点:Kali的软件仓库里有很多体积很大的工具包,尤其渗透测试相关工具动辄几百MB。如果你不换源,用官方源直接下载一个几百MB的工具包,中途连接失败只能重来,浪费时间不说,还特别消磨耐心。我自己的体验是,换了国内镜像源之后,apt update从原来的几分钟甚至超时,缩短到几秒钟,下载速度也从几十KB/s提升到几MB/s,某些镜像的CDN节点甚至能跑到10MB/s以上。这种差距,用过一次就回不去了。
1.3 换源其实换的是三类内容
换源操作本质上涉及三件事,很多人只做了第一件:
- 替换/写入软件源地址列表,让APT从国内镜像拉取索引和安装包;
- 同步GPG签名密钥。Kali官方对Release文件做数字签名,APT为了验证索引文件的完整性和真实性,需要对应的公钥。部分第三方镜像没有自动同步Kali官方密钥链,或者你系统里密钥过期了,就需要手动导入新的密钥;
- 更新索引缓存,执行
apt update让新的源配置生效,同时确认有没有配置错误。
这三件事缺一不可。最典型的翻车场景是:只改了sources.list,没有处理密钥问题,结果apt update报错The following signatures couldn't be verified because the public key is not available,然后一脸懵。所以后面操作部分我会把密钥同步的步骤一并放进去。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前先选源:常用国内镜像对比与选型建议
2.1 主流的几个国内Kali镜像源
目前国内可用的、维护质量较高的Kali镜像源主要有以下几个:
- 清华大学 TUNA 镜像源(
mirrors.tuna.tsinghua.edu.cn) - 中国科学技术大学 USTC 镜像源(
mirrors.ustc.edu.cn) - 阿里云开源镜像站(
mirrors.aliyun.com) - 浙江大学开源镜像站(
mirrors.zju.edu.cn) - 华为云镜像站(
mirrors.huaweicloud.com) - 网易镜像源(
mirrors.163.com)
坦白说,Kali官方自己也在镜像列表里维护了这些站点的更新状态,所以从可靠性上讲,这几个主流源都差不太多。但从实际体验和网络测试来看,不同地区、不同运营商访问这几个源的速度差异比较明显。电信用户访问清华和中科大通常很顺,联通用户有些时候阿里云和华为云的CDN表现更好,移动网络则要具体测试。
有一个通用判断标准:你自己用curl或者ping测一下,哪个响应快、丢包少就用哪个。不要看到别人说某个源好就无脑抄,网络环境不一样,结论可能完全相反。我自己常用的备选方案是:清华源为主,阿里云做备用,万一主源出现同步故障,改几行字切过去就是。
2.2 关于源地址结构的一个常见困惑
选源的时候,很多人会疑惑一个问题:源的URL路径到底应该是kali还是kali-security还是什么都不加?如果你去镜像站首页看Kali的帮助说明,通常给出的写法类似这样:
bash复制deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
但你在Kali官方文档里看到的可能是:
bash复制deb https://http.kali.org/kali kali-rolling main contrib non-free
去掉协议部分,观察后面的路径,核心结构其实是:镜像站域名/kali这个仓库根路径。Kali不像Debian那样把安全更新单独拆成一个xxx-security仓库(至少在滚动发行模式下,安全更新直接进入主仓库),所以不需要额外配kali-security。如果你在镜像站上看到源码路径写着kali-images,那是安装镜像文件,不是软件源,别搞混。这里有一个很多人忽略的点:main contrib non-free non-free-firmware是Kali的软件包组件分类,按Docker镜像或者极简安装的需求,可以只保留main,但如果要做渗透测试,contrib和non-free里包含一些有依赖限制或闭源固件类工具,建议默认全保留。
2.3 官方还是不官方,这本身是个选择
部分人会问:直接保持官方源,然后挂代理不是也行吗?这个问题我不展开讨论,只提醒一点:Kali的定位是安全测试发行版,软件源的完整性和安全性非常关键。使用镜像源的推荐做法是优先选择高校和大型云厂商维护的源,这些机构对同步完整性和GPG签名校验的处理比较规范,被篡改的概率极低。相比之下,一些个人维护的小镜像站或来路不明的“一键换源脚本”,反而可能是供应链攻击的入口。安全从业者如果在自己吃饭的工具系统上都随意使用可疑源,那真是自己给自己挖坑。
另外,不建议在Kali里混用Debian的软件源。Kali基于Debian的Testing分支,但它有自己的包版本和依赖修改。如果你把Debian官方源加进去,APT解析依赖时很可能把系统搞成“半Kali半Debian”的混乱状态,轻则装不上工具,重则把核心库降级导致桌面崩溃。这个坑我见过太多人踩了,后面会单独说。
3. 完整换源实操:一步步手把手配置
3.1 操作前的备份与系统准备
换源前先做备份是一个好习惯,虽然只是改一个文本文件,但养成习惯以后做其他系统配置时会受益很多。打开终端,执行:
bash复制sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
这条命令把原始文件复制一份为.bak后缀,之后如果换源出了问题,可以直接用下面命令恢复:
bash复制sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list
同时建议检查一下系统是否已经存在第三方源文件。Kali默认情况下/etc/apt/sources.list.d/目录里应该是空的或只有官方源注释掉的残留文件,但有些人之前可能加过其他源,需要一并查看:
bash复制ls -l /etc/apt/sources.list.d/
查看目录下如果有.list文件,建议先查看内容,防止历史残留的deb源和新的配置冲突。
还有一个容易被忽略的操作:备份软件源签名密钥的信任状态。实际上不需要手动备份,因为密钥同步后操作系统级管理,但如果你是一个对系统洁癖比较重的人,可以导出当前的keyring文件:
bash复制sudo cp -r /etc/apt/trusted.gpg.d /etc/apt/trusted.gpg.d.bak
这里的trusted.gpg.d目录存放APT信任的GPG密钥。新版Debian系系统里,第三方源推荐的密钥存放位置其实不是这里,而是/usr/share/keyrings或/etc/apt/keyrings,但因为Kali官方源的密钥默认就放在系统内,所以这一步不是必须的。写出来只是让你知道有这个东西存在,出问题时不至于完全陌生。
3.2 写入新的源地址列表
备份完成后,开始编辑源列表文件。Kali新版默认的sources.list里内容注释很完整,你可以选择两种方式之一:
方式一:直接编辑覆盖现有内容。使用nano编辑器(Kali预装)打开文件:
bash复制sudo nano /etc/apt/sources.list
把文件里的内容全部清空或者注释掉,然后粘贴以下内容(以清华源为例):
code复制deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
保存退出。nano的保存快捷键是Ctrl + O回车确认,退出是Ctrl + X。
方式二:使用sed命令原地替换。这一招适合熟悉命令行的朋友。原理是找到sources.list里所有http://http.kali.org/kali这样的官方地址,全局替换为镜像地址:
bash复制sudo sed -i 's|http://http.kali.org/kali|https://mirrors.tuna.tsinghua.edu.cn/kali|g' /etc/apt/sources.list
注意替换命令里的分隔符用了|而不是常用的/,原因是URL路径里本身包含很多斜杠,如果用/做分隔符,需要写一堆转义符,麻烦且容易出错。用|替代就可以直接照抄URL。
如果你选择阿里云源,就把地址换成https://mirrors.aliyun.com/kali;中科大源对应https://mirrors.ustc.edu.cn/kali。结构完全一样,只替换域名部分即可。
这里有一个细节要说明:Kali官方源老版本的URL前缀是http://http.kali.org/kali,后来官方文档改成https://http.kali.org/kali。新装的Kali系统里往往还会有https://写法。如果你不知道该替换成什么,最简单的办法是先查看文件原始内容:
bash复制grep -v '^#' /etc/apt/sources.list
不带#开头的行是有效配置,看清现有的域名格式再替换,避免漏掉某些行。
3.3 签名密钥同步:很多人漏掉的关键步骤
写完源列表直接执行apt update,大概率会遇到类似下面的GPG错误:
code复制Reading package lists... Done
W: GPG error: https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 44C6513A8E6FB8D9
W: The repository 'https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling InRelease' is not signed.
出现这个问题的原因,并不是镜像源本身有问题,而是你的APT本地没有Kali官方Release文件的签名公钥。有的Kali安装方式会预置好密钥,有的精简安装或旧版本则没有,需要手动导入。
解决办法是使用wget或curl下载Kali官方公钥,并通过gpg --dearmor转换为APT可识别的keyring文件。这也是目前Debian系第三方源的标准做法,比直接把密钥apt-key add导入到trusted.gpg更现代、更安全。
完整命令如下:
bash复制wget -q -O - https://archive.kali.org/archive-key.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/kali-archive-keyring.gpg >/dev/null 2>&1
如果你系统里没有wget,用curl也可以:
bash复制curl -fsSL https://archive.kali.org/archive-key.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/kali-archive-keyring.gpg >/dev/null 2>&1
这条命令的逻辑是:先下载armored格式的公钥文件,然后通过GPG工具将文本格式转换为二进制keyring格式,最后写入APT的信任目录。>/dev/null 2>&1的作用是丢弃终端输出,否则tee会把文件内容回显到屏幕上,刷一大屏没必要。
过去很多老教程会教你使用wget -q -O - https://archive.kali.org/archive-key.asc | sudo apt-key add -。这个方式在旧版本Kali上能用,但apt-key在Debian 11之后的系统中已经被标记为deprecated,新版本Kali里可能不再预装,而且它的信任范围是全局的,不够精细。我更建议一开始就养成使用keyring目录的习惯。
密钥导入后,可以执行以下命令确认密钥是否被系统识别:
bash复制apt-key list 2>/dev/null || ls -l /etc/apt/trusted.gpg.d/
apt-key list在新版本里可能提示已弃用,但这没关系,改用ls查看密钥文件是否存在于trusted.gpg.d目录即可。
3.4 更新索引并验证换源是否成功
密钥就位后,执行换源成功与否的“试金石”命令:
bash复制sudo apt update
正常情况下,输出末尾会显示类似这样的汇总信息:
code复制Get:1 https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling InRelease [41.5 kB]
Get:2 https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling/main amd64 Packages [17.9 MB]
...
Fetched 35.4 MB in 8s (4.4 MB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are indexed.
这里有几个指标可以判断是否成功:
Fetched后面的下载速度不再是几十KB/s,而是几MB/s到十几MB/s,说明网络链路通畅;- 输出中没有红色或
W:开头的警告行,说明签名校验通过; Reading package lists... Done正常结束,没有报错中断。
随后可以再执行一次真正的安装测试,找一个体积适中、之前没装的工具试试手。比如:
bash复制sudo apt install -y netdiscover
如果能够快速完成下载和安装,说明整个链路完全打通。此时再用apt list --upgradable看一下系统里有哪些包可以升级,如果有需要就执行sudo apt upgrade,但不建议在刚换完源后立刻升级全系统,原因下面细说。
我建议收藏一条验证命令,以后每次改了源或怀疑源有问题时都用它快速判断:
bash复制sudo apt update && apt list --upgradable | head -20
4. 换源后的高频坑与排查技巧实录
4.1 “NO_PUBKEY”报错到底怎么解决
换源后最常见的报错就是开头提到的NO_PUBKEY,这本质上是信任链断裂。
要理解这个问题,你先要知道APT的软件包验证机制。APT在apt update时会下载一个InRelease文件,它带有GPG签名,里面包含了软件包列表文件的哈希值。APT用本地信任的GPG公钥去验签,验签通过,说明这个InRelease文件确实来自Kali官方,没有被篡改。然后APT再根据InRelease里记录的哈希去下载校验Packages.gz等文件,保证整个软件包索引的完整性。
如果你本地的公钥不存在或者过期了,验签这步就无法完成,APT会拒绝信任这个软件源。这个机制设计得很安全,但对新手来说就表现为一个莫名其妙的报错。
解决方法除了上面提到的下载archive-key.asc再转换为keyring,还有一种是通过apt-key adv从公钥服务器拉取指定公钥:
bash复制sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 44C6513A8E6FB8D9
不过apt-key已经废弃,且依赖外部公钥服务器在部分网络下不一定连得上。我的建议:优先用官方归档公钥文件的方式,这是最稳妥、最不容易被网络环境干扰的办法。
4.2 “仓库没有Release文件”的成因
这个报错常见于你把Debian源地址写成了https://mirrors.xxx.com/debian/并且把发行版代号写成了kali-rolling之外的值。错误信息通常长这样:
code复制E: The repository 'https://mirrors.tuna.tsinghua.edu.cn/debian kali-rolling Release' does not have a Release file.
注意看URL路径是/debian而不是/kali。很多人在网上复制粘贴不同发行版的源配置时不注意,把Debian的一条源直接改了个代号就丢进Kali里,结果路径是Debian仓库,却要它提供kali-rolling这个版本的索引,镜像站当然报错。
解决的排查思路:
- 执行
cat /etc/apt/sources.list检查是否有拼写错误; - 用浏览器直接访问源地址路径,确认该镜像站确实提供
/kali/dists/kali-rolling/Release这个路径; - 检查是否有同时存在的
.list文件指向其他发行版源,尤其要注意/etc/apt/sources.list.d/下有没有残留的第三方源。
这个报错本质上是一个路径排查问题,只要理解“源的地址路径必须对应真实存在的仓库”这一点,就很好解。
4.3 换源后要不要立刻升级系统和内核
很多人换好源后做得第一件事就是sudo apt upgrade,觉得不把系统升级到最新就不舒服。这个想法在Kali里要慎重。
Kali是滚动发行版且内核和驱动更新很激进。如果你只是换了源,原系统版本和最新的源之间可能积累了大量差异,尤其当你安装Kali的ISO版本比较老的时候。这时执行sudo apt full-upgrade,等于一次性把几百甚至上千个包升级到最新,过程容易因为依赖冲突中断,万一升到一半断网或断电,系统可能直接进不去桌面。
我的建议做法是:换源的头几天先只执行apt update,日常需要装什么工具就apt install什么。等有明确需求时再执行full-upgrade,并且升级前先做一层快照(虚拟机)或备份关键配置。实际做渗透测试的人不会天天全量升级系统,因为工具链版本变动可能影响测试环境一致性。这个习惯是我踩过几次坑后总结出来的,新装的Kali被我不小心升级到内核模块挂掉,然后又花半天重配环境,得不偿失。
4.4 版本架构导致过滤了安装包
还有一个不那么常见但出现时会让人摸不着头脑的情况:apt update成功,但apt install时提示“无法定位软件包”。这通常不是源的问题,而是你的APT没有获取到指定架构的软件包列表。
Kali官方源支持amd64、arm64等架构。如果你在ARM设备(比如树莓派)上装了Kali,然后在网上找了一份只包含amd64 Packages索引的源配置,或者反过来,就会有问题。排查方法:
bash复制dpkg --print-architecture
确认输出与你下载的Kali镜像架构一致。通常树莓派的Kali镜像会自动配置好arm64架构,不需要额外处理。如果发现不一致,可以添加架构:
bash复制sudo dpkg --add-architecture arm64
sudo apt update
另一个可能原因是你安装的是Kali的WSL版本或容器版本,这些环境里的软件源列表经常被裁剪过,和完整版桌面环境的源结构不同,直接套用普通教程会找不到某些包。
4.5 优先级冲突:别让Kali变得不伦不类
最后必须强调一个我前面提过的问题:不要在Kali里添加Debian官方源、Ubuntu源或“麒麟应用商店”等其它发行版的源。有些人觉得多添加几个源软件更全,这是个极其危险的误解。
APT在安装软件时,会根据包的版本号和源优先级来决定从哪个源安装。如果同一个包在Kali源里是1.0版,在Debian源里是1.2版,APT会把系统里的包升级到1.2版。但Kali里很多工具链依赖的是Kali源里特调的依赖关系,版本一变,轻则某个工具功能异常,重则整个桌面依赖崩掉。系统会变成既不像Kali也不像Debian的半吊子状态,恢复起来比重新装系统还麻烦。
如果你担心某些工具在Kali源里找不到,正确做法是去搜该工具官方提供的独立仓库或直接源码编译,而不是降低安全底线混用源。这不仅是技术洁癖问题,更是对自身测试环境稳定性的负责。
5. 延伸场景:换源后还要做什么
5.1 顺手解决中文输入法问题
热搜词里有一个和Kali相关度很高的需求:“linux kali系统怎么安装中文输入法”。其实解决了软件源之后,这个问题的复杂度会下降一大截。
在Kali里安装中文输入法,主流方案是安装fcitx5和中文输入法引擎,例如fcitx5-chinese-addons。换好源后直接执行:
bash复制sudo apt install -y fcitx5 fcitx5-chinese-addons
然后把输入法框架设置为fcitx5。在桌面环境里打开终端执行:
bash复制im-config -n fcitx5
重启或重新登录后,在fcitx5配置界面里添加拼音输入法即可。这一步的原理和换源完全一致:没有可用的软件源,任何apt install都是一句空话。我自己每次在新环境配置Kali时,都会先把换源和输入法两件事连着做完,省得后面想起来又得折腾一遍。
5.2 配置代理加速后续下载(替代方案视角)
除了换源,另一个提升下载速度的思路是通过代理访问外部资源。这个方向涉及的内容比较多,本文就不展开来写。只说一点:换源解决的是APT默认源的速度问题,但有些工具需要直接从GitHub下载资源,那属于另一条技术路径,和软件源配置是两码事,不要混淆。如果平时主要从官方源和镜像源安装工具,换源这一步基本就够用了。
5.3 定期检查源状态和保持系统干净
软件源不是配好就一劳永逸的,镜像站偶尔也会出现同步延迟、磁盘故障或证书过期的情况。建议隔一段时间执行一次:
bash复制sudo apt update
如果发现某个镜像源的同步时间停留在几天前,说明该镜像可能出了状况,这时候切换到备用源即可。切换的方式前面已经说过,把sources.list里的域名替换成另一个镜像站的域名,再执行apt update,整个过程不超过一分钟。
另外,有一个很多Kali新手容易忽略的点:执行apt install时偶尔会提示“有软件包未通过验证”之类的信息,可能是因为Kali官方轮换了签名密钥而你的keyring没有同步。这时候重新跑一遍前面3.3小节里下载archive-key.asc的命令,问题就能解决。
6. 写在最后:换源这事儿的实际体验总结
换源这件事说起来就是改几行文本,但背后涉及的软件包信任机制、APT源结构、镜像同步逻辑,其实是Linux系统管理的基础功。把原理搞懂,以后遇到任何发行版的换源问题,都能自己推理出正确的操作,而不是依赖一份写死的教程。就我个人来说,换源已成为Kali环境配置的第一步,也是新虚拟机装好后最先执行的几件事之一。这套流程我至少执行过几十遍,踩过密钥过期、源路径写错、升级中途崩掉等各种坑,上面写下的每一个细节,都是亲身经历换来的教训。如果你按文章里的步骤操作并耐心读完排查章节,绝大多数问题应当可以自己化解。就算遇到特殊情况,只要理解软件源的本质是一条“从哪里取软件”的地址记录,排查思路就不会乱。
