首页/新闻资讯/正文详情

PiKVM 双因素认证(2FA/TOTP)配置指南:为 KVMD 3.196+ 的 Web 界面、API 与 VNC 登录增加一次性密码保护

发布时间:2026/9/24 14:28:16 来源:云帆数科 栏目:资讯中心
PiKVM 双因素认证(2FA/TOTP)配置指南:为 KVMD 3.196+ 的 Web 界面、API 与 VNC 登录增加一次性密码保护
PiKVM 双因素认证2FA/TOTP配置指南为 KVMD 3.196 的 Web 界面、API 与 VNC 登录增加一次性密码保护【免费下载链接】pikvmOpen and inexpensive DIY IP-KVM based on Raspberry Pi项目地址: https://gitcode.com/gh_mirrors/pi/pikvm本文基于 PiKVM 官方发布公告KVMD 3.196 版本引入 2FA 支持与认证文档系统讲解在 PiKVM 上启用基于 TOTP基于时间的一次性密码的双因素认证的完整流程——从系统更新、NTP 校时、kvmd-totp命令行工具的使用到 Web 登录页、HTTP API 与 VNC 三种接入场景下的密码组合规则并补充仓库源码与配置层面的实现佐证。读完本文你将能把任何一台 KVMD ≥ 3.196 的 PiKVM 设备V1/V2 DIY、V3、V4 均适用安全地暴露到不可信网络如公网中同时为 Linuxroot账户、KVM 账户建立一套完整的凭据加固方案。背景KVMD 3.196 带来了什么PiKVM 是一个基于 Raspberry Pi 的开源 DIY IP-KVM 项目项目主页通过 Web 界面、VNC 或 IPMI 等方式远程管理服务器的键盘、视频与鼠标。长期以来PiKVM 的认证体系只依赖用户名 密码默认 KVM 用户为admin/admin一旦密码泄露攻击者即可完全控制被管服务器。2023-01-23 发布的 KVMD 3.196 首次为 PiKVM 加入了**双因素认证2FA**支持对应发布公告见 docs/blog/posts/2023/2023-01-23/index.md。其实现基于标准的TOTPRFC 6238基于时间的一次性密码算法与主流身份验证器 AppGoogle Authenticator、Authy 等完全兼容。官方在发布公告中特别指出如果计划将 PiKVM 暴露到公网或部署在不受信任的网络中强烈建议启用 2FA。启用后KVM 的 Web 登录页会新增一个2FA code输入框所有 Web UI 用户登录时都必须同时提供密码与 6 位一次性验证码。2FA 的适用边界与账户体系在动手之前需要先理清 PiKVM 的认证实体因为2FA 只保护 KVM 相关的接入通道不保护 Linux 系统级账户。根据 docs/auth.md 的说明PiKVM 存在以下认证主体认证主体默认凭据用途是否受 2FA 保护Linux OS 级管理员rootroot/rootSSH、串口控制台、Web Terminal 提权❌ 不受保护需自行设置强密码或 SSH 密钥KVM 用户adminadmin/adminWeb UI 登录、HTTP API、VNC 等✅ 受 2FA 保护OS 用户kvmd-webterm无不可登录仅用于 Web Terminal禁用sudo与密码访问—VNCAuth key默认禁用VNC 认证—IPMI 密码默认禁用IPMI 接入—两个账户是相互独立的。设备到手后第一件事就是同时修改这两套默认密码否则仅开启 2FA 并不会阻止攻击者通过 SSH 以root/root直接登录系统。在 Web Terminal 中获取 root 权限大多数管理命令需要 root 权限。Web Terminal 默认运行在受限用户kvmd-webterm下通过su -并输入 root 密码即可提升[kvmd-webtermpikvm ~]$ su - ... [rootpikvm kvmd-webterm]#如果你希望彻底关闭 Web Terminal 的控制台访问例如设备的实际使用者和拥有者不是同一人可以执行[rootpikvm ~]# rw [rootpikvm ~]# systemctl disable --now kvmd-webterm [rootpikvm ~]# ro此时你依然可以通过 SSH 访问 PiKVM 系统。启用 2FA 的完整操作步骤官方文档docs/auth.md#two-factor-authentication给出了六步启用流程以下结合 docs/_update_os.md 与仓库命令约定逐条展开。第 1 步更新系统并重启2FA 功能自 KVMD 3.196 起可用因此首先要确保 KVMD 版本满足要求。PiKVM OS 默认以只读文件系统运行所有写操作前需要先执行rw切换为可写操作结束后再ro切回[rootpikvm ~]# rw [rootpikvm ~]# pacman -Syu [rootpikvm ~]# reboot官方发布公告中给出的正是这一组命令rw→pacman -Syu→reboot。对于较新的 PiKVM OS更推荐使用封装好的pikvm-update一键更新脚本如果提示bash: pikvm-update: command not found说明 OS 版本过旧需先执行pacman -Syy pacman -S pikvm-os-updater安装更新器后再运行pikvm-update详见 docs/_update_os.md。第 2 步确认 NTP 时间同步TOTP 的核心是对时间的依赖——验证码由“当前时间 共享密钥”推导而来时间偏差会导致验证码校验失败。因此必须确保 NTP 服务正在运行[rootpikvm ~]# timedatectl重点确认系统时间已同步System clock synchronized: yes。时区不影响 TOTP 正确性无需修改。第 3 步在手机安装身份验证器 App在移动设备上安装Google AuthenticatoriOS / Android 均可它将负责在登录时生成 6 位一次性验证码。任何兼容 TOTP 的验证器如 Authy、Microsoft Authenticator也可以使用。第 4 步在 PiKVM 上初始化 TOTP 密钥执行以下命令生成共享密钥[rootpikvm ~]# rw [rootpikvm ~]# kvmd-totp init [rootpikvm ~]# rokvmd-totp是 KVMD 提供的 TOTP 管理命令行工具其完整子命令如下命令功能kvmd-totp init初始化/重新生成共享密钥并在终端以 ASCII 艺术形式渲染出 QR 码kvmd-totp show再次显示当前密钥对应的 QR 码方便多设备扫码或找回kvmd-totp del删除密钥即关闭 2FA小彩蛋正如发布公告中所提到的kvmd-totp init会在终端里直接用 ASCII 字符绘制 QR 码——在纯文本终端SSH、Web Terminal中也能完成扫码无需图形界面。第 5 步扫码绑定验证器打开 Google Authenticator选择“添加账户”→“扫描二维码”扫描上一步在终端中输出的 QR 码。绑定完成后App 会每 30 秒滚动生成一个 6 位验证码。第 6 步登录时输入验证码绑定完成后PiKVM 登录页会出现2FA code输入框如上方界面截图所示。所有 Web UI 用户登录时都必须在输入密码之后再填写当前验证码。需要特别注意的是共享密钥对所有用户是同一个kvmd-totp管理的是一份全局密钥默认存放在/etc/kvmd/totp.secret即所有 KVM 用户共用同一套一次性验证码2FA 只负责“你是否持有这个密钥载体”的二次验证并不区分具体用户。API 与 VNC 场景下的 2FA密码拼接规则2FA 并不只在 Web 登录页生效。对于 API 或 VNC 认证VNCAuth 模式除外需要将一次性验证码直接追加到密码后面中间不留空格。例如密码为foobar当前验证码为123456则实际提交的密码为foobar123456这一规则同样适用于脚本化接入 HTTP API 的场景。docs/api.md中给出了使用 Pythonpyotp库自动计算验证码并发起 API 请求的完整示例import requests import pyotp user admin passwd admin secret 3OBBOGSJRYRBZH35PGXURM4CMWTH3WSU # 可在 /etc/kvmd/totp.secret 中找到 print(requests.get( urlhttps://pikvm/api/info, verifyFalse, # 默认安装使用自签名证书 headers{ X-KVMD-User: user, X-KVMD-Passwd: passwd pyotp.TOTP(secret).now(), }, ).text)对应命令行curl写法使用X-KVMD-User/X-KVMD-Passwd请求头进行单次请求认证$ curl -k -H X-KVMD-User:admin -H X-KVMD-Passwd:admin6位验证码 https://pikvm-ip/api/auth/check由于存在“验证码恰好处于 30 秒有效期边界”的边界情况文档建议在代码中处理 403 错误时自动重试或更稳妥地在发起请求前主动检查验证码剩余有效期totp pyotp.TOTP(secret) now int(time.time()) remaining now - (now % totp.interval)密码管理与安全加固修改 Linux root 密码2FA 不覆盖系统账户因此 root 必须使用高强度密码或配置 SSH 密钥登录[rootpikvm ~]# rw [rootpikvm ~]# passwd root [rootpikvm ~]# ro修改 KVM 密码htpasswd 体系KVM 用户默认采用类似 Apache Server 的认证方式用户与密码加密存储在/etc/kvmd/htpasswd中通过kvmd-htpasswd工具管理[rootpikvm ~]# rw [rootpikvm ~]# kvmd-htpasswd set admin [rootpikvm ~]# ro也可以创建多个 KVM 用户注意所有 KVM 用户拥有相同权限目前无法为不同用户配置 ACL[rootpikvm ~]# kvmd-htpasswd add user # 新增用户并设置密码 [rootpikvm ~]# kvmd-htpasswd list # 列出所有用户 [rootpikvm ~]# kvmd-htpasswd del user # 删除用户补充加固会话过期与按需禁用认证配置会话过期时间从 KVMD 4.53 起Web 登录页可选择会话时长1 小时 / 12 小时 / 无限。你还可以通过配置文件设置全局默认的会话上限此限制仅对 Web UI 生效VNC 会话始终为无限期。编辑/etc/kvmd/override.yamlkvmd: auth: expire: 21600 # 21600 秒 6 小时然后重启服务并验证[rootpikvm ~]# systemctl restart kvmd [rootpikvm ~]# journalctl -u kvmd -g Maximum user session ... INFO --- Maximum user session time is limited: 6:00:00关于会话过期的两个实现细节docs/auth.md#session-expiration 原文说明PiKVM 的视频流大量依赖 WebSocket 与长连接 HTTP。会话过期会使授权 cookie 失效新连接无法建立但已建立的长连接不会立即中断直到用户关闭浏览器标签页——该机制主要防止用户关闭浏览器却不点击 Logout 时留下无限会话点击主页面上的Logout按钮会注销该用户在所有浏览器中的全部会话。完全禁用认证谨慎如果确实需要例如纯内网环境可以关闭 KVM 接入Web UI、VNC 等SSH 除外的认证。官方明确警告不要在不受信任的网络中这样做否则可能把被管服务器直接暴露给潜在攻击者kvmd: auth: enabled: false应用配置并建议同时关闭 Web Terminal[rootpikvm ~]# systemctl restart kvmd [rootpikvm ~]# systemctl disable --now kvmd-webterm # 可选若你保留 SSH 访问 [rootpikvm ~]# ro从源码与配置看实现细节密钥存储TOTP 共享密钥默认保存在/etc/kvmd/totp.secretkvmd-totp工具负责其生成、展示与删除。该路径在 docs/auth_advanced.md 的totp配置项中亦有印证且可在 KVMD 配置中自定义。可插拔认证架构2FA/TOTP 并非独立的认证后端而是叠加在htpasswd、PAM、LDAP、RADIUS 等认证方法之上的全局附加层见 docs/auth_advanced.md 中的说明“2FA/TOTP is always available, works locally and is compatible with all the methods listed here”。无论你为 PiKVM 配置了何种内部/外部认证方式TOTP 验证码都会在密码之后参与校验。与认证配置的关系/etc/kvmd/override.yaml中kvmd.auth.enabled全局开关与kvmd.auth.expire会话过期等键位在 docs/auth_advanced.md 中有完整参数说明修改后统一通过systemctl restart kvmd生效。结语公网暴露前的安全检查清单将 PiKVM 暴露到公网之前建议按顺序完成以下加固完整清单与更多细节见 docs/auth.md 与 docs/cheatsheet.md更新系统至 KVMD ≥ 3.196推荐pikvm-update并确认 NTP 已同步修改root密码或配置 SSH 密钥修改 KVM 用户admin密码执行kvmd-totp init并用 Google Authenticator 扫码绑定为 Web 登录页配置合理的会话过期时间kvmd.auth.expire若需要脚本/API 接入牢记“密码 验证码直接拼接”的规则妥善保管/etc/kvmd/totp.secret丢失密钥载体将需要重新执行kvmd-totp init或使用kvmd-totp del彻底关闭 2FA。2FA 不能替代强密码但结合上述全部措施PiKVM 即便部署在公网攻击者也需要同时窃取密码与持有验证器设备才能进入管理界面——这正是 KVMD 3.196 发布公告所说的“提升 PiKVM 安全性的机会”。【免费下载链接】pikvmOpen and inexpensive DIY IP-KVM based on Raspberry Pi项目地址: https://gitcode.com/gh_mirrors/pi/pikvm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Play Framework Scala 错误处理完全指南:从 HttpErrorHandler 到自定义 JSON/HTML 错误响应
Play Framework Scala 错误处理完全指南:从 HttpErrorHandler 到自定义 JSON/HTML 错误响应

后端Web框架 【免费下载链接】playframework The Community Maintained High Velocity Web Framework For Java and Scala. 项目地址: https://gitcode.com/gh_mirrors/pl/playframework 点击查看 免费下载 导读 本文基于 Play Framework 官方 Scala 指南中的《Ha… · 2026/9/24 14:28:16

2026低代码平台选型指南:织信、宜搭、奥哲、CodeWave等10款热门工具对比
2026低代码平台选型指南:织信、宜搭、奥哲、CodeWave等10款热门工具对比

上月月底,一个做装备制造的朋友把他的低代码采购清单转给我看。同样一份需求,十家厂商的报价从八千八一年,到八十万一次性买断,差了将近一百倍。他没问哪家便宜。他问的是,这十家到底在比什么。我把他的需求表拆开数了… · 2026/9/24 14:28:16

我是标题哈哈
我是标题哈哈

今天星期无哈哈 · 2026/9/24 14:28:10

Flowable 监听器使用指南
Flowable 监听器使用指南

Flowable 监听器使用指南 在 Flowable 流程引擎中,监听器(Listener)是扩展流程行为的核心机制之一。它允许开发者在流程执行的特定时刻插入自定义逻辑,而无需修改 BPMN 流程图本身。Flowable 主要提供两种监听器:执行监… · 2026/9/24 15:01:48

django-cms 3.4.4 升级指南:Page 方法与 Placeholder 工具函数的破坏性变更全解析
django-cms 3.4.4 升级指南:Page 方法与 Placeholder 工具函数的破坏性变更全解析

CMS后端 【免费下载链接】django-cms The easy-to-use and developer-friendly enterprise CMS powered by Django 项目地址: https://gitcode.com/gh_mirrors/dj/django-cms 点击查看 免费下载 本文以 django-cms 官方升级文档 docs/upgrade/3.4.4.rst 为主体&am… · 2026/9/24 15:01:48

Erlang/OTP Public_Key 应用深度指南:公钥基础设施、PKIX 证书链与数字签名
Erlang/OTP Public_Key 应用深度指南:公钥基础设施、PKIX 证书链与数字签名

编程语言语言运行时标准库编译器并发编程 【免费下载链接】otp Erlang/OTP 项目地址: https://gitcode.com/gh_mirrors/ot/otp 点击查看 免费下载 导读 本文围绕 Erlang/OTP 中负责公钥基础设施(Public Key Infrastructure)的 public_key 应… · 2026/9/24 15:01:48

OpenCV 扩展图像处理模块 ximgproc 全指南:从边缘检测到超像素的 18 项算法能力
OpenCV 扩展图像处理模块 ximgproc 全指南:从边缘检测到超像素的 18 项算法能力

OpenCV 扩展图像处理模块 ximgproc 全指南:从边缘检测到超像素的 18 项算法能力 【免费下载链接】opencv_contrib Repository for OpenCVs extra modules 项目地址: https://gitcode.com/gh_mirrors/op/opencv_contrib 本篇技术指南围绕 OpenCV 扩展模块 xim… · 2026/9/24 15:01:48

Keystone 6 Hooks 实战指南:在 CRUD GraphQL 操作中嵌入自定义业务逻辑
Keystone 6 Hooks 实战指南:在 CRUD GraphQL 操作中嵌入自定义业务逻辑

Keystone 6 Hooks 实战指南:在 CRUD GraphQL 操作中嵌入自定义业务逻辑 【免费下载链接】keystone The superpowered headless CMS for Node.js — built with GraphQL and React 项目地址: https://gitcode.com/gh_mirrors/key/keystone Keystone 6 为每个 … · 2026/9/24 15:01:42

任意文件下载漏洞挖掘|网络安全教程 30 个实战技巧从入门到精通
任意文件下载漏洞挖掘|网络安全教程 30 个实战技巧从入门到精通

前言 文件下载漏洞(任意文件读取 / 目录穿越下载)是 Web 渗透测试中出现频率最高、利用门槛最低、危害极大的经典高危漏洞。 该漏洞原理极其简单:后端未对用户可控的文件参数做路径校验、过滤、白名单限制,导致攻击者可以穿越目… · 2026/9/24 15:01:42

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码