必须使用cockpit.socket而非cockpit.service,因其采用socket-activated模式:按需启动cockpit-ws进程,节省资源且更安全;误启cockpit.service会报“Unit not found”错误。

直接装完就能用,但不按规范启用 cockpit.socket、不放行 9090 端口、或忽略 HTTPS 证书警告,会导致打不开页面或登录失败。
为什么必须用 cockpit.socket 而不是 cockpit.service
Cockpit 默认设计为 socket-activated 模式:只有浏览器发起 HTTPS 连接时,systemd 才拉起 cockpit-ws 进程,断开后自动退出。这比常驻 cockpit.service 更省资源,也更安全。
- 若误执行
systemctl start cockpit.service,可能启动失败(报错Failed to start cockpit.service: Unit cockpit.service not found) - 检查是否正确启用:
systemctl is-active cockpit.socket应返回active,而非inactive或failed - Ubuntu/Debian 用户尤其注意:包安装后默认不启用任何单元,
systemctl enable --now cockpit.socket这步不可跳过
firewalld 和 ufw 放行端口的写法差异
不同发行版防火墙工具命令不兼容,混用会导致规则不生效。重点看当前系统实际在用哪个:
- RHEL/CentOS/Rocky/AlmaLinux(
firewalld):firewall-cmd --permanent --add-service=cockpit(推荐,语义清晰)或firewall-cmd --permanent --add-port=9090/tcp - Ubuntu/Debian(
ufw):ufw allow 9090,不能用--permanent参数(ufw本身无此选项) - 改完必须重载:
firewall-cmd --reload或ufw reload,否则规则仅存于内存未写入运行时
登录失败常见原因和验证步骤
页面能打开但输密码后卡住或提示“Authentication failed”,往往不是密码错,而是权限或配置问题:
- 用户必须有有效 shell(
/sbin/nologin或/usr/sbin/nologin的账户无法登录) - 用户需具备
sudo权限(Cockpit 后台调用systemctl、journalctl等命令依赖 sudoers 配置) - 首次访问必须用 HTTPS:
http://会被浏览器直接拒绝,且https://会触发自签名证书警告,必须点“高级→继续前往” - 确认监听状态:
ss -tlnp | grep ':9090'应看到cockpit-ws进程绑定在*:9090,而非127.0.0.1:9090(后者只允许本地访问)
root 登录被拒?别急着改配置
Cockpit 默认禁止 root 登录是安全策略,不是 bug。强行开启前先确认是否真有必要:
- 普通 sudo 用户已能执行全部管理操作(服务启停、日志查看、存储配置等),root 并不额外解锁新功能
- 如确需 root 登录,编辑
/etc/cockpit/disallowed-users,删掉或注释root行,再运行systemctl restart cockpit.socket - 注意:修改后 root 可登录,但 Web 终端中执行的命令仍受系统级 SELinux/AppArmor 限制,不会绕过安全模块
最容易被忽略的是证书警告后的“继续前往”操作——很多人卡在这一步以为服务没起来,其实只是浏览器拦截了自签名 HTTPS。只要 cockpit.socket 是 active、端口监听正常、防火墙放行无误,点进去就进得去。











