本指南详细介绍如何在树莓派 5上以无显示屏 (headless) 方式部署 Kali Linux (XFCE 桌面环境),并使用 FRP (Fast Reverse Proxy) 实现远程访问。内容涵盖从准备镜像、烧录 TF 卡、系统初始化配置,到安装常用工具、设置图形界面和 VNC 服务,以及通过 FRP 进行内网穿透远程连接的完整步骤。所有操作均针对无屏幕环境设计,并提供清晰的命令行示例(含注释)和配置文件示例。
涉及工具介绍#
硬件工具清单#
- 树莓派 5-16G 版
- 树莓派 5 铝合金 CNC 超薄外壳 - 带风扇版(请自行淘宝搜索购买)
- 官方 PD 充电器(Raspberry Pi 5 的性能比 Raspberry Pi 4 更高,使用功率不足的电源可能会遇到问题。故推荐使用高质量的 5V 5A USB-C 电源)
- TF 卡 - U3V30A2(64GB 及以上)
- 读卡器
软件工具清单#
- Kali 官方镜像:https://kali.download/arm-images/kali-2025.2/kali-linux-2025.2-raspberry-pi-arm64.img.xz
- 树莓派官方启动盘制作工具:https://downloads.raspberrypi.org/imager/
- VNC 工具:https://www.realvnc.com/en/connect/download/viewer/(笔者个人推荐)
- FRP:https://github.com/fatedier/frp
准备 Kali 树莓派镜像与 TF 卡烧录#
下载镜像: 前往 Kali Linux 官方网站获取适用于树莓派的最新 ARM64 镜像文件。例如,我们使用 kali-linux-2025.2-raspberry-pi-arm64.img.xz 镜像,它已包含 XFCE 桌面环境并支持树莓派 5 硬件。建议使用64GB 或更大容量的高速 microSD TF 卡来容纳完整的系统和工具集。下载镜像后,可验证其 SHA256 校验值以确保文件完整无误。
准备烧录工具: 安装 Raspberry Pi 官方提供的镜像写入工具 Raspberry Pi Imager(支持 Windows、macOS、Linux)。我们也可以使用 Balena Etcher 等工具或命令行 dd 进行烧录,但 Raspberry Pi Imager 提供了方便的预配置选项。
烧录镜像到 TF 卡:
- 将 TF 卡插入读卡器并连接电脑。确保备份卡内重要数据或使用全新卡。
- 打开 Raspberry Pi Imager,点击 “选择操作系统 (Choose OS)” 按钮。在列表中找到 “Kali Linux”(在 “Other specific purpose OS” 即可找到) 。选择与树莓派 5 硬件架构匹配的 64 位 Kali Linux 镜像。或在 “使用自定义镜像” 中上传已下载好的镜像。
- 点击 “选择存储 (Choose Storage)” 并选择目标 TF 卡。 (千万小心检查这一步骤,不要刷错哦!!!)
- (可选)预先格式化:如遇到写入错误,可先用 SD Card Formatter 等工具将 TF 卡完整格式化为 FAT32/exFAT 格式 。
在点击 “写入” 前,我们可以通过 Raspberry Pi Imager 的高级选项对系统进行预配置,以便实现开机无头登录。
使用 Raspberry Pi Imager 写入镜像并配置预设选项#
打开高级配置: 在 Raspberry Pi Imager 中,选择好镜像和存储设备后,点击窗口中的齿轮图标 (或使用快捷键 Ctrl+Shift+X) 打开高级选项菜单。Raspberry Pi Imager 提供了一系列预设配置项,方便我们在烧录时写入系统配置 :
- 启用 SSH: 在 “服务” 中勾选 “Enable SSH”,选择允许使用密码验证登陆。这样系统首次启动时将自动开启 SSH 服务。
- 设置主机名: 在 “Set hostname” 中输入系统主机名,例如 kali-pi,便于在局域网内通过名称访问树莓派。
- 设置默认用户名 / 密码: 填写默认账户(例如用户名 kali)和密码(例如 kali)。Kali 默认用户名 / 密码即为 kali/kali 。若使用自定义用户名,注意 Kali 镜像可能会自动存在 kali 用户,可保持默认以简化流程。
- 配置 Wi-Fi: 填写 Wi-Fi 网络的 SSID(无线名称)和密码,选择 Wi-Fi 国家 / 地区代码。国家代码很重要,需与你的 Wi-Fi 所在地匹配(例如在中国可填 CN)。这将生成 Wi-Fi 配置,以便树莓派启动时自动连接无线网络。
- 区域和本地化: 设置本地语言和键盘,键盘布局选择 “us”(英文),时区选择 “Asia/Shanghai” 或相应时区。正确的区域设置有助于系统显示中文并使用正确的键盘布局。
配置完成后,点击 “保存”,然后点击 “写入” 开始烧录镜像并应用上述预设选项。
注意: 根据社区经验,Kali Linux 官方镜像不完全支持 Raspberry Pi Imager 的自动预配置功能 。这意味着即使在 Imager 中设置了 SSH 和 Wi-Fi,首次启动后未必生效。为确保无显示器情况下能够远程连接,我们可以采取手动方式辅助配置 SSH 和 Wi-Fi(见下文)。
等待写入完成: 烧录过程可能需数分钟到十几分钟。完成后 Imager 会验证写入结果。烧录成功后,先不要急于取出卡,我们还需进行一些手动配置(特别是确保 SSH 启用和 Wi-Fi 配置正确)。
首次启动前的手动配置(启用 SSH 和 Wi-Fi)#
由于 Kali Linux 镜像在首次启动时默认关闭 SSH且无法通过 Raspberry Pi Imager 自动配置 Wi-Fi ,建议在插入树莓派并开机前,执行以下手动配置以确保系统能够连入网络并允许 SSH 登录:
-
挂载分区: 烧录完成后,电脑上会出现两个新分区:一个名为 boot 的引导分区(FAT32),另一个是 Linux 根文件系统分区(ext4,Windows 下可能不可见)。我们主要操作 boot 分区,也就是 /boot 分区。
-
启用 SSH: 在 boot 分区根目录下创建一个名为 ssh 的空文件(无扩展名)。这会在系统首次引导时触发 Kali 启用 SSH 服务 。在 Windows 下可新建一个文本文件并命名为 “ssh”(确保无.txt 后缀)。在 Linux/macOS 下可以执行命令(假设 boot 挂载在 /mnt/boot):
# 在boot分区创建空的ssh文件以启用SSH sudo touch /mnt/boot/ssh
-
配置 Wi-Fi: 如果需要让树莓派通过 Wi-Fi 联网,在 boot 分区根目录创建一个 wpa_supplicant.conf 文件,并填入无线网络配置。文件内容格式如下(请根据实际 Wi-Fi 信息修改):
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=CN # 将CN改为你的国家代码,如 US, UK 等 network={ ssid="Your_WiFi_SSID" # Wi-Fi 名称 psk="Your_WiFi_Password" # Wi-Fi 密码 key_mgmt=WPA-PSK # 加密类型,WPA2 常用 WPA-PSK }
-
将上述内容中的 Your_WiFi_SSID 和 Your_WiFi_Password 替换为实际的无线网络名称和密码。保存时注意确保文件名为 wpa_supplicant.conf(不要有.txt 扩展名)。Kali 在引导时通常会将此配置文件移动到 /etc/wpa_supplicant/ 并用于连接 Wi-Fi。
完成以上步骤后,弹出并取出 TF 卡。将卡插入树莓派 5,连接电源开机。等待约 1-2 分钟让系统完成首次启动配置。
同时这里建议,在自己的路由器中,完成 DHCP 静态 IP 分配。
首次启动与 SSH 远程登录 Kali#
树莓派加电启动后,会依据上一步配置尝试连接 Wi-Fi 并启用 SSH 服务。接下来,我们需要在另一台电脑上通过 SSH 登录进树莓派的 Kali 系统:
-
查找树莓派 IP 地址: 无显示屏环境下获取设备 IP 是首要挑战。你可以登录路由器的管理界面查询新连接的设备(根据主机名 kali-pi 或查看新增的 DHCP 列表),或者使用局域网扫描工具如 nmap 扫描网段以找到开放的 22 端口的主机 。另一个方法是使用 mDNS 主机名(如果网络支持),尝试直接 SSH 连接 kali-pi.local(前提是网络内 DNS 解析或电脑安装了 Bonjour 服务)。
-
使用 SSH 连接: 在终端或命令提示符执行(将 替换为实际树莓派 IP 地址):
ssh kali@<IP>
-
如果使用了我们预设的用户名 / 密码(或 Kali 默认 kali/kali),会提示输入密码进行登录 。首次连接需接受主机密钥。
-
更换密码: 初次登录后,出于安全考虑请及时修改默认账户的密码:
sudo passwd kali
- 按提示输入新密码。
至此,你已经通过 SSH 成功登录到了树莓派上的 Kali 系统。接下来可以进行系统配置和软件安装。
提示: 如果此时无法 SSH 连接树莓派,请参考文末常见问题排查章节。常见原因包括 SSH 未成功启用、Wi-Fi 未连接等,可通过有线网络连接或重新配置上述文件进行修复。
更换软件源为国内镜像 (提高更新速度)#
Kali Linux 默认软件源在国外服务器,在国内直接更新可能较慢甚至失败。我们可以将软件源切换为国内镜像源(如清华大学开源镜像站)以提升速度 。操作步骤:
-
备份源列表: 编辑源列表文件前,建议备份原文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
-
编辑 /etc/apt/sources.list: 使用 vim、nano 等编辑器打开该文件,注释掉原有的官方源行,在文件顶部添加国内源地址。例如添加清华大学的 Kali 镜像源:
sudo nano /etc/apt/sources.list
# 中科大源、阿里源等亦可使用,这里以清华TUNA源为例 # 清华大学 Kali 镜像源 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
-
上述两行分别指定了二进制软件包源和源码源的地址。其中 kali-rolling 是 Kali 的滚动更新分支,包含 main(主)、contrib(贡献)、non-free(非自由)及 non-free-firmware(非自由固件)组件。确保根据实际需要包含所有组件,以免缺少驱动或工具。
-
更新 APT 密钥(若有需要): 如果更换源后运行更新出现 公钥无效 等错误,可执行以下命令导入 Kali 官方仓库公钥
sudo wget -q -O - https://archive.kali.org/archive-key.asc | sudo apt-key add -
然后重新运行更新命令,修改完成后保存退出编辑器。
更新系统并升级软件包#
更换源后,首先执行系统更新,确保安装最新补丁和索引:
# 更新软件包索引
sudo apt update -y
# 升级已安装的软件包
sudo apt -y full-upgrade -y
上述命令将刷新 APT 包列表并应用所有可用升级。 在 Kali (Debian) 中,建议使用 full-upgrade(或 dist-upgrade)以处理可能的依赖变更。过程可能需要一些时间,尤其如果镜像版本不是最新。耐心等待完成,期间如果遇到提示,可按 Y 确认或 q 跳过查看更详细信息。
系统升级完毕后,建议重启一次树莓派(sudo reboot),以确保内核等更新生效。重启后重新通过 SSH 登录继续后续步骤。
安装 kali-linux-everything 工具集#
Kali Linux 提供了多个工具集元包,其中 kali-linux-everything 包含了 Kali 下 “几乎所有” 工具。 在有足够存储空间和带宽的情况下,我们可以一键安装这个工具集,以便在树莓派上具备完整的渗透测试工具
sudo apt install -y kali-linux-everything
版本名称 | 简要说明 | 使用场景 |
---|---|---|
Installer / Default | 标准安装版,仅含基础系统和常用渗透测试工具 | 通用渗透测试环境,适合联网更新 |
Live ISO | 可启动运行,无需安装(含 GUI 与部分工具) | 临时测试、U 盘随身系统、取证 |
Netinst | 最小化安装,需联网拉取组件 | 高度定制化安装,适合轻量虚拟机或自动部署 |
Large | 包含绝大多数主流 Kali 工具的安装包 | 渗透测试者常用,部署后几乎无需额外安装 |
Everything | 包含 Kali 仓库中所有工具,安装镜像达 20GB+ | 离线环境部署、大型靶场、完全工具链准备 |
功能模块 | Default/Installer | Large | Everything |
---|---|---|---|
kali-linux-default 工具集 | ✅ | ✅ | ✅ |
top10, wireless, web 等分类工具 | ⛔️(手动安装) | ✅(包含多数) | ✅(全部) |
所有 Kali 元包(metapackage) | ⛔️ | 部分 | ✅ 全部 |
工具总数(粗略估计) | 100–200 | 300–400 | 600+ |
该命令可能下载数 GB 的数据(完整安装体积可能超过 20GB),请确保网络稳定且 TF 卡剩余空间充足(安装 64GB 或更大容量卡的原因所在)。根据网络速度,此过程可能持续较长时间。安装过程中 APT 会自动处理依赖关系并配置软件,如有交互提示,按默认或根据需要选择。
完成后,树莓派上的 Kali 将拥有完整的工具集,为各种安全测试做好准备。
配置图形界面和 VNC 服务 (远程桌面)#
在无显示屏情况下,我们仍可能需要使用 Kali 的图形桌面(XFCE)运行某些工具或获取完整桌面体验。为此,我们将配置系统在引导时启动图形界面,并通过 VNC 实现远程桌面访问。
设置默认启动进入图形界面#
Kali Linux 树莓派镜像默认可能启动到文本控制台以节省资源。若希望系统启动后即进入 XFCE 桌面环境,我们需要调整系统 target 为图形模式:
# 将系统默认运行级别设置为图形界面
sudo systemctl set-default graphical.target
执行上述命令后,系统默认将尝试启动显示管理器 (例如 LightDM) 进入图形界面。由于我们是无头环境,如果树莓派未连接显示器,默认情况下 X 服务器可能无法实际显示界面。不过我们仍可通过 VNC 来创建虚拟显示。
注意: 如果树莓派始终无物理显示器,graphical.target 虽会启动桌面服务,但没有 HDMI 连接时可能不会创建默认 :0 显示输出。后续我们通过 VNC 虚拟桌面解决这一问题。如果将来需要连接显示器进行本地操作,可保持该设置方便直接进入桌面。
安装 TigerVNC 服务#
TigerVNC 是性能良好的 VNC 服务器实现。我们选择它来在树莓派上运行虚拟桌面会话。安装命令:
sudo apt install -y xfce4 xfce4-goodies tigervnc-standalone-server tigervnc-common autocutsel
- tigervnc-standalone-server 安装 TigerVNC 服务端程序。
- tigervnc-common 提供相关的常用文件。
- autocutsel 工具用于在 VNC 会话与本地剪贴板之间同步剪贴板(复制 / 粘贴)
安装完成后,设置 VNC 访问密码并初始化配置:
# 切换到普通用户 (如果当前是 root 登录,请切回 kali 用户)
exit # 确保在 kali 用户下操作
# 设置 VNC 密码(会提示输入密码并确认)
vncpasswd
# 初次启动 VNC 服务(生成配置文件并创建 VNC 会话 :1)
vncserver :1
首次运行 vncserver :1 时,它会要求设置访问密码(长度不超过 8 位),并可选设置 “只读” 密码(这里选择 n,无需只读密码) 。随后会输出类似信息,表示启动了编号:1 的 VNC 桌面(对应 TCP 端口 5901)
因为 VNC 服务启动在 5900 端口,而我们需要为桌面环境新建一个端口,这里 1 就是 + 1,即在 5901 端口,如果是 vncserver :2 就是 5902 端口,依次类推。
New 'X' desktop is kali:1
Creating default startup script /home/kali/.vnc/xstartup
Starting applications specified in /home/kali/.vnc/xstartup
Log file is /home/kali/.vnc/kali:1.log
这表示 TigerVNC 已在后台启动了一个虚拟桌面会话。默认情况下,这个虚拟桌面可能仅有一个灰色背景和 X 终端(或可能因为尚未正确配置而退出)。接下来我们进行配置以启动 XFCE 桌面环境。
停止刚才启动的 VNC 会话:
vncserver -kill :1
这将终止会话,以便我们编辑配置文件后重新启动。
配置 VNC 的 XFCE 桌面会话#
TigerVNC(以及 TightVNC)默认的启动脚本位于~/.vnc/xstartup,首次运行时已生成。我们需要修改它以启动 XFCE4 桌面环境,否则 VNC 连接后可能只看到灰色屏幕和 X 光标。编辑文件:
sudo nano ~/.vnc/xstartup
将其中内容替换为以下内容:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 & # 启动 XFCE4 桌面会话
autocutsel -fork # 启动剪贴板同步
上述配置确保每次 VNC 虚拟会话启动时,清除可能的残留会话环境变量,然后后台启动 XFCE4 桌面,并运行 autocutsel 以支持剪贴板共享。 保存文件后退出编辑器。
赋予 xstartup 脚本可执行权限:
sudo chmod +x ~/.vnc/xstartup
注意: xstartup 文件权限必须是可执行,否则 TigerVNC 将忽略它,导致无法启动 XFCE 桌面
手动测试 VNC 连接#
现在手动启动 VNC 服务,测试能否通过远程桌面访问:
# 再次启动一个 VNC 会话 :1
vncserver :1 -geometry 1280x800 -depth 24
这里指定了分辨率为 1280x800,色深 24 位。你可以根据需要调整 -geometry 参数设置合适的虚拟屏幕分辨率(常见如 1920x1080 、2560×1440 等)
启动成功后,在你的 PC 上使用 VNC Viewer(如 TigerVNC Viewer、RealVNC Viewer 等),连接树莓派的 IP 和端口好,例如:
192.168.1.25:5901
当出现密码提示时,输入之前设置的 VNC 密码,即可看到 Kali XFCE 桌面环境的画面。此时,你已经在无显示器的树莓派上远程使用图形界面了
如果连接后出现灰屏或黑屏,可能是 xstartup 配置有误或未赋予可执行权限,请返回检查~/.vnc/xstartup 内容是否与上文一致且可执行。另外,确保前一步已经先 vncserver -kill 再编辑再启动,否则旧实例不会读取新配置。
vncserver -kill :1
设置 VNC 服务开机自启#
为了在树莓派每次启动时自动开启 VNC 服务(无需手动命令),我们可以设置 systemd 服务来管理 VNC Server。在 Kali 上创建一个新的 systemd 单元文件:
sudo nano /etc/systemd/system/vncserver@.service
填入以下内容并保存:
[Unit]
Description=Start TightVNC (TigerVNC) server at startup
After=syslog.target network.target
[Service]
Type=forking
User=bluedog
Group=bluedog
WorkingDirectory=/home/bluedog
PIDFile=/home/bluedog/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1920x1080 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
以上配置中,用 % i 代表实例号,例如 vncserver@1.service 将 % i 替换为 1,从而启动 :1 会话 。我们设置服务以 kali 用户身份运行,在启动前尝试杀掉残留的 :1 实例,启动时设定分辨率为 1920x1080、色深 24 位,可根据需要修改。
保存文件后,刷新 systemd 配置并启动、启用服务:
sudo systemctl daemon-reload
sudo systemctl start vncserver@1.service # 启动 VNC服务实例 :1
sudo systemctl enable vncserver@1.service # 设置开机自启
现在即使树莓派重启,系统启动过程中也会自动开启 VNC 服务,使你随时可以远程连接桌面。
提示: 默认 VNC 服务监听本地所有接口的 5901 端口,仅在局域网内访问。如果需要通过互联网访问,建议结合下面的 FRP 内网穿透配置,或确保网络环境安全并设置复杂的 VNC 密码。
动态调整 vnc 的分辨率#
默认 vnc 的客户端不支持动态调整 vnc 的分辨率适应客户端的屏幕大小。但是可以手动修改。
xrandr
并且会显示当前支持分辨率。
xrandr --output VNC-0 --mode 2560x1440
执行后就会调整当前 vnc 窗口的大小为对应分辨率。
配置 FRP 实现远程访问 (内网穿透)#
在许多实际场景中,树莓派可能位于内网或没有公网 IP,无法直接通过互联网连接。我们可以使用 FRP 实现内网穿透,将树莓派的 SSH 和 VNC 服务映射到公网服务器,从而随时远程访问树莓派。
FRP (Fast Reverse Proxy) 由客户端和服务端组成:
- FRP 服务端 (frps) 部署在具有公网 IP 或云服务器上,监听来自客户端的连接并开放端口供远程访问。
- FRP 客户端 (frpc) 部署在树莓派等内网设备上,主动连接 FRP 服务端并将本地服务端口映射出去。
下面假设你已有一台具有固定公网 IP 或域名的服务器可用来充当 FRP 服务端(或使用某云服务器)。我们将使用该服务器做中转,将树莓派的 SSH 及 VNC 端口映射出去。
在服务端配置 FRP 服务 (frps)#
(如果已有 FRP 服务端运行,可跳过此节。)在云服务器上:
-
下载 frp: 从 FRP 官方仓库获取最新版本。可以通过浏览 https://github.com/fatedier/frp/releases 找到最新版本下载链接。例如,这里假设最新版本为 v0.61.0,对应 Linux amd64 平台:
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz tar -xzf frp_0.61.0_linux_amd64.tar.gz cd frp_0.61.0_linux_amd64
-
配置 frps: 在解压目录下找到 frps.toml(如果不存在就创建)。写入如下配置:
########################################
# Fast Reverse Proxy Server (frps) #
# 位置:阿里云 ECS 4*.**.**.**0 #
########################################
# [common]
# ───────── 基础监听 ─────────
bindAddr = "0.0.0.0" # 监听所有 IPv4(需要 IPv6 可改 ":::")
bindPort = 7501 # frpc 侧的 serverPort 必须一致,且需要在云服务器上开启对应端口
# ───────── 认证令牌 ─────────
auth.token = "请设置为自己的口令" # 客户端 auth.token 必须保持相同
# ───────── 域名转发端口 ─────
# 暂未启用域名解析,直接关闭 80/443,避免多开端口
# vhostHTTPPort = 0
# vhostHTTPSPort = 0
# ───────── 日志配置 ─────────
# logFile = "/root/frp/frps.log" # 自定义日志路径
# logLevel = "info" # 可选:trace, debug, info, warn, error
# logMaxDays = 7 # 日志保留天数
# ───────── 可选:仪表盘 ─────
# dashboardPort = 7501 # Web UI 端口
# dashboardUser = "请设置为自己的用户名"
# dashboardPwd = "请设置为自己的密码"
# ───────── 可选:TLS 加固 ────
# 如果需要 mTLS,可启用:
# authenticationMethod = "token,tls"
# tlsOnly = true
# 证书相关字段参见官方示例
subdomainHost = "如有请设置为自己的域名"
- 启动 frps: 可以直接在前台运行:
sudo ./frps -c ./frps/frps.toml
或将其作为后台服务运行:
nohup ./frps -c ./frps/frps.toml &>/var/log/frps.log &
-
确保服务器的防火墙开放所需端口(例如 TCP 7000,以及待映射出去的端口,如 SSH 的 6000、VNC 的 6001 等)。
-
配置 frps 开机自启: 新建 systemd 服务 /etc/systemd/system/frps.service,写入以下内容:
[Unit] Description=Fast Reverse Proxy Server (frps) After=network.target [Service] Type=simple ExecStart=/root/frp/frps -c /root/frp/frps.toml #注意自己的路径! Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target
保存后启用服务:
sudo systemctl daemon-reload sudo systemctl enable frps sudo systemctl start frps
在树莓派配置 FRP 客户端 (frpc)#
回到我们的 Kali 树莓派:
- 下载 frpc: 根据树莓派架构下载 FRP 客户端的 Linux ARM64 版本。版本需与服务端一致
cd /tmp
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_arm64.tar.gz
tar xzf frp_0.61.0_linux_arm64.tar.gz
cd frp_0.61.0_linux_arm64
sudo cp frpc /usr/bin/ # 安装frpc可执行文件到路径
sudo cp frpc.toml /etc/frpc/frpc.toml # 复制默认配置文件到 /etc
-
上述以 v0.61.0 为例,请替换为实际最新版号。 解压后我们将 frpc 可执行文件放入 /usr/bin,方便直接运行;将示例配置重命名放入 /etc 便于统一管理。
-
配置 frpc: 编辑 /etc/frpc/frpc.toml 文件,根据实际需求修改。如我们希望将树莓派的 SSH (22 端口) 和 VNC (5901 端口) 映射到服务器对应端口,对应配置可以如下:
###############################################################################
# Fast Reverse Proxy Client (frpc)
# 主机:Raspberry Pi Kali — 192.168.**.**(请切换为你自己的IP地址)
###############################################################################
#############################
# frps 连接信息
#############################
serverAddr = "4*.**.**.**0" # 阿里云公网 IP
serverPort = 7501 # frps.bindPort
loginFailExit = false # 断线不退出,持续重连
[auth]
method = "token"
token = "请设置为自己的口令" # 与 frps.token 保持一致
#############################
# 端口映射(TCP)
#############################
[[proxies]] # SSH
name = "kalissh"
type = "tcp"
localIP = "192.168.**.**"
localPort = 22
remotePort = 5022 # 已在 frps.allowPorts & 安全组开放
[[proxies]] # VNC
name = "kalivnc"
type = "tcp"
localIP = "127.0.0.1"(这里必须使用回环地址!!!)
localPort = 5901
remotePort = 5901 # 已在 frps.allowPorts & 安全组开放
在 [common] 部分填入 FRP 服务端地址、端口和认证 token 等公共参数 。然后定义两个隧道:[ssh] 和 [vnc],分别将本地的 SSH 服务 (192.168.*0.**:22) 和 VNC 服务 (127.0.0.1:5901) 通过 FRP 暴露出去。其中 remote_port 指定 FRP 服务端开启的端口号,你可根据需要更改,但要与服务端防火墙配置对应。
- 配置 frpc 开机自启: 新建 systemd 服务 /etc/systemd/system/frpc.service,写入以下内容:
[Unit]
Description=Fast Reverse Proxy Client (frpc)
After=network.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/home/username/frp/frpc -c /home/username/frp/frpc.toml #注意自己的路径!
Restart=always
RestartSec=3
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
保存后启用服务:
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
这样树莓派启动时将自动运行 frpc,并在网络就绪后连接到 FRP 服务器。
- 验证连接: 在树莓派上运行 sudo systemctl status frpc 查看日志,确认已成功连上服务端,没有错误。如有问题,可检查 /var/log/syslog 或 /var/log/frpc.log(如果设置了日志输出)。
在服务器上,也可以检查 frps 日志或使用 ss -tnl 确认对应端口已在监听。
- 远程访问: 现在,在任何网络环境下,你都可以通过访问FRP 服务器的 IP / 域名 + 端口来管理树莓派:
- SSH 访问:ssh kali@<服务器 IP> -p 6000 (通过 FRP 的 5022 端口转发到树莓派的 22 端口)。首次使用时可将此组合加入~/.ssh/config 便于快捷连接 。
- VNC 访问:在 VNC Viewer 中连接 <服务器 IP>:6001,即通过 FRP 服务器的 6001 端口转发到树莓派的 5901。输入之前设置的 VNC 密码,即可远程桌面控制树莓派。
经过 FRP,中间通信会通过我们指定的 token 验证和(若启用了 TLS 则)加密传输,确保了一定安全性。为了更安全,建议 SSH 采用密钥认证并禁用密码登录 等额外加固措施。
现在,无论树莓派位于何处(哪怕在蜂窝网络等受 NAT 限制的环境),只要 FRP 客户端和服务器保持连接,我们就能随时通过 FRP 隧道远程 SSH 或 VNC 访问树莓派上的 Kali 系统了。
其他软件和折腾#
登陆欢迎界面定制#
组件 | 作用 |
---|---|
/etc/update-motd.d/* | 一系列可执行脚本,按数字前缀从小到大依次运行,将输出拼接生成 动态 MOTD。 |
/etc/motd | 静态 MOTD 文本。若存在内容,将附加在动态 MOTD 之后。 |
pam_lastlog.so | 由 PAM 调用,自动输出 Last login 记录。 |
/etc/issue.net + Banner 指令 | SSH 会话横幅。可复用 ASCII Banner,实现本地 / 远程一致。 |
文件结构与执行顺序
/etc/update-motd.d/
├── 00-header # ASCII Banner
├── 10-sysinfo # 系统状态
└── 20-network # 网络信息
数字前缀决定执行先后;输出顺序即显示顺序。
制作 ASCII Banner#
-
在线生成
- 打开 https://patorjk.com/software/taag
- 输入 BlueDog → 选择字体(如 ANSI Shadow)→ Copy
-
本地生成
figlet -f slant "BlueDog"
toilet -f big -F metal "BlueDog"
将生成的字符画复制备用。
编写 00-header#
sudo tee /etc/update-motd.d/00-header >/dev/null <<'EOF'
#!/bin/bash
clear # 防止上屏残留
# ---------------- ASCII Banner -----------------
cat <<'BANNER'
,---,. ,--, ,---,
,' .' \ ,--.'| .' .' `\
,---.' .' | | | : ,--, ,---.' \ ,---.
| | |: | : : ' ,'_ /| | | .`\ | ' ,'\ ,----._,.
: : : / | ' | .--. | | : ,---. : : | ' | / / | / / ' /
: | ; ' | | ,'_ /| : . | / \ | ' ' ; : . ; ,. : | : |
| : \ | | : | ' | | . . / / | ' | ; . | ' | |: : | | .\ .
| | . | ' : |__ | | ' | | | . ' / | | | : | ' ' | .; : . ; '; |
' : '; | | | '.'| : | : ; ; | ' ; /| ' : | / ; | : | ' . . |
| | | ; ; : ; ' : `--' \ ' | / | | | '` ,/ \ \ / `---`-'| |
| : / | , / : , .-./ | : | ; : .' `----' .'__/\_: |
| | ,' ---`-' `--`----' \ \ / | ,.' | : :
`----' `----' '---' \ \ /
`--`-'
BANNER
echo "-------------------------------------------------------------------------------------"
EOF
sudo chmod +x /etc/update-motd.d/00-header
编写 10-sysinfo#
sudo tee /etc/update-motd.d/10-sysinfo >/dev/null <<'EOF'
#!/bin/bash
OS="$(lsb_release -ds)"
KERNEL="$(uname -r)"
MEM_USED="$(free -h --si | awk 'NR==2 {print $3 "/" $2}')"
DISK_ROOT="$(df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}')"
CPU_TEMP="$(vcgencmd measure_temp | cut -d= -f2)"
printf "🖥 系统: %s | 内核: %s\n" "$OS" "$KERNEL"
printf "💾 内存: %s\n" "$MEM_USED"
printf "📦 磁盘: %s\n" "$DISK_ROOT"
printf "🌡 温度: %s\n" "$CPU_TEMP"
echo "-------------------------------------------------------------------------------------"
EOF
sudo chmod +x /etc/update-motd.d/10-sysinfo
编写 20-network#
sudo tee /etc/update-motd.d/20-network >/dev/null <<'EOF'
#!/bin/bash
IP=$(hostname -I | awk '{print $1}')
SSID=$(iwgetid -r 2>/dev/null || echo "离线")
printf "🌐 IP 地址: %s\n" "$IP"
printf "📶 Wi-Fi SSID: %s\n" "$SSID"
echo "-------------------------------------------------------------------------------------"
EOF
sudo chmod +x /etc/update-motd.d/20-network
清空默认 /etc/motd#
sudo mv /etc/motd /etc/motd.bak # 备份
sudo touch /etc/motd # 创建空文件
这样保留 Last login,去除 GPL/Warranty 说明。
SSH 横幅同步(可选)#
sudo cp /etc/update-motd.d/00-header /etc/issue.net
sudo sed -i 's@^#Banner none@Banner /etc/issue.net@' /etc/ssh/sshd_config
sudo systemctl restart ssh
风扇 & 变速调控#
首先树莓派 5 度风扇调度是 65 度才开始转的,没有安装任务和大模型任务的时候基本不转。
并且因为 gpiozero + RPi.GPIO 尚未全面支持树莓派 5,因此会在访问 GPIO 时爆出错误
所以我们只能通过 config.txt 中的参数启用 RP1 控制器的风扇自动调速功能,原生支持 1~3 个温控档位(温度触发 + PWM 占空比组合)。
多档温控风扇配置方法(config.txt)
需要在 /boot/firmware/config.txt(树莓派 5 使用的是该路径)中添加如下配置:
# 树莓派 5 风扇三档自动调速配置
dtparam=cooling_fan=on
# 档位1:40°C 开始,风扇以 60% 速运行(153/255)
dtparam=fan_temp1=40000,fan_temp1_hyst=5000,fan_temp1_speed=153
# 档位2:50°C 开始,风扇以 80% 速运行(204/255)
dtparam=fan_temp2=50000,fan_temp2_hyst=5000,fan_temp2_speed=204
# 档位3:55°C 开始,风扇全速运行(255/255)
dtparam=fan_temp3=55000,fan_temp3_hyst=5000,fan_temp3_speed=255
核心机制为:当 CPU 温度超过某一档的温度门槛,就切换到对应速度,不会回落到低档位,直到温度低到对应滞后门限。
可额外设置滞后参数(建议设置):
dtparam=fan_temp3_hyst=5000 # 第三档降到 50°C 才停
Wi-Fi 多网络自动切换设置(家用 + 手机热点)#
Kali 默认使用 wpa_supplicant 管理 Wi-Fi。
- 编辑 Wi-Fi 配置文件:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
添加两个网络(按优先级自动切换):
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
ssid="你的家庭WiFi"
psk="你的家庭密码"
priority=10
}
network={
ssid="你的手机热点"
psk="你的热点密码"
priority=5
}
- priority 数值越大,优先连接;
- 自动连接在可用场景中优选上面的 Wi-Fi。
保存后重启网络服务或直接重启:
sudo wpa_cli -i wlan0 reconfigure
安装输入法#
安装 Google 拼音以及 Fcitx
sudo apt install fcitx fcitx-googlepinyin
切换输入法框架
im-config
按照输入法完成后一定要重启系统才能生效.