文章目录[隐藏]
Cockpit 是一款由红帽公司开发的免费开源、基于 Web 的 Linux 服务器管理平台。

优点
- 无需中间层,且可以根据需求安装不同的插件来管理多种服务。
- 支持支持Debian, Redhat, CentOS, Fedora, Atomic, Arch Linux, and Ubuntu。
- 占用内存小,可以做到20MB内存
推荐插件安装介绍
官方插件
- cockpit:主程序,只需要安装在主控服务器上
- cockpit-system:管理主框架,每台服务器必装
- cockpit-bridge:管理网桥,每台服务器必装
- cockpit-files:文件管理器,直接在 Web 端管理服务器文件系统,按需安装。
- cockpit-networkmanager 网络管理器,由传统 ifupdown 管理的服务器可能需要
- cockpit-pcp:性能监控历史,如果不安装只能看到实时数据,按需安装
- cockpit-podman:管理Podman容器,按需安装
- cockpit-machines:KVM虚拟机监控,按需安装
- cockpit-storaged:磁盘管理器,负责硬件与分区管理,按需安装
第三方插件
45Drives
主要是针对Ubuntu跟Debian优化,默认这两个对cockpit-files是不支持的。当然RockyLinux也可以安装。
- cockpit-navigator:45Drives版本的cockpit-files,是一个纯粹的全功能文件浏览器,按需安装
- cockpit-file-sharing:45Drives版本的cockpit-storaged,支持图形化挂载NFS跟Samba,定位是网络共享协议管理(NAS 功能)按需安装。
- 注1:上面的按需安装指的是如果你这个服务器需要这个功能才安装,主(管理)服务器没必要全部安装。
- 注2:挂载NFS磁盘需要安装nfs-utils功能。
# CentOS 8或者 RockyLinux
sudo dnf install nfs-utils -y
# CentOS 7
sudo yum install nfs-utils -y
# Debian或者Ubuntu
sudo apt install nfs-kernel-server nfs-common -y
程序安装
主(管理)服务器安装
接下来就是安装过程。我的主控是安装在Ubuntu 24.04上的。
# 更新系统支持
sudo apt update
# 安装 Cockpit主程序
sudo apt install cockpit -y
# 启动并设置开机自启
sudo systemctl enable --now cockpit.socket
# 配置防火墙(如果已启用ufw):
sudo ufw allow 9090/tcp
sudo ufw reload
这时候框架就搭好了,剩下的就是安装各种插件了。主控服务器上建议直接一把安装起来。
sudo apt install cockpit-system cockpit-pcp cockpit-bridge cockpit-networkmanager cockpit-storaged -y
Ubuntu 24.04 (Noble) 的很多 Cockpit 插件都放在了 Backports 软件源中。如果有些软件不给安装,可以启动Backports 仓库。
sudo apt update
sudo apt install -t noble-backports -y
有时候这个也不好使,比如Debian。
那就直接把Backports 软件源定义下来
# 新建backports源:
vi /etc/apt/sources.list.d/backports.list
# 将以下代码丢进去
deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware
也可以使用以下方式:
# 新建backports源:
vi /etc/apt/sources.list.d/debian-backports.sources
# 将以下代码丢进去
Types: deb deb-src
URIs: http://deb.debian.org/debian
Suites: trixie-backports
Components: main
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
不管哪种方式都要执行系统更新,让系统确认下都有哪些包
apt update
有时候即使弄了这个也不好使,就直接放弃使用45Driver的安装库吧。
curl -sSL https://repo.45drives.com/setup | sudo bash
# 大礼包,根据需求自己选择
sudo apt install cockpit-navigator cockpit-file-sharing cockpit-zfs-manager cockpit-identities cockpit-benchmark
不过45Driver也很死板,人家只负责维护正在服役的LST的低一个版本的安装。例如Ubuntu现在是24.04当道,他们就维护22.02。直接在库里写死了。
if [[ “$distro_codename” != “focal” ]] && [[ “$distro_codename” != “jammy” ]] && [[ “$distro_codename” != “bookworm” ]] && [[ “$distro_codename” != “noble” ]]; then
所以目前支持的版本情况如下:
- Rocky:el7、el8、el9,也就是Rocky 7.0、Rocky 8.0、Rocky 9.0
- Ubuntu:focal、jammy,也就是Ubuntu 20.04、Ubuntu 22.04
- Debian:bookworm,也就是Debian12
然后被吐槽了,开发者说想要等24.04的官方维护,那就等26.04出来吧,反正也快了...
We are not working on Ubuntu24 support at this time. We generally like to stay 1 major version behind for any bug fixes and issues that come up with the bleeding edge of software.
I’m sure once Ubuntu26 is released we will then start the process of creating Ubuntu24 packages.
于是有个哥们强行兼容了,就造福我们了。
不过仍然要先说,这个毕竟不是官方做的。注意风险。另外真的如同官方说的,等26.04出来了就干脆催他们把24.04的弄起来。
被管理主机安装
也就是对于一般需求的主机,只需要安装:
- Rocky Linux 系统
sudo dnf install cockpit-system cockpit-files
sudo dnf install cockpit-storaged -y
sudo dnf install nfs-utils -y
- Debian/Ubuntu 系统
首先尝试能否直接安装cockpit-files
sudo apt install cockpit-bridge cockpit-system cockpit-files -y
如果cockpit-files 安装报错先安装框架
sudo apt install cockpit-bridge cockpit-system -y
#特殊磁盘挂载需求
sudo apt install cockpit-storaged -y
sudo apt install nfs-utils -y
装不起来的,参考安装45files的方案。
登陆
在 Cockpit 中,并没有独立的账号体系。它直接使用?Linux 系统本地账户 进行认证。这意味着任何拥有系统登录权限的用户默认都可以尝试登录 Cockpit。Cockpit默认禁止root账户登陆,但是仍然需要一个有使用sudo权限的用户登陆。一般我们单个用户都是root用户,强烈建议再新建一个非root用户例如cockpitadmin登陆。
新建cockpitadmin
sudo useradd -r -M -s /usr/sbin/nologin cockpitadmin
sudo passwd cockpitadmin
能在 Cockpit 中执行管理操作,需要将其添加到 sudo 组:
sudo usermod -aG sudo cockpitadmin
sudo chsh -s /bin/bash cockpitadmin
当然也可以执行以下命令拒绝Cockpit的好意。
# 删除以下文件的"root"行
vi /etc/cockpit/disallowed-users
root
#保存退出
:wq
# 重启服务
systemctl restart cockpit.socket
访问方式
关联从服务器
- 使用 SSH 密钥(推荐): 只要 主服务器上有可以登录 被管理服务器的私钥(如 root 或其他具有 sudo 权限的账户),就可以在 Cockpit 的“添加新主机”界面中通过该账户名和私钥进行认证。
- 使用 被管理服务器现有的账户: 只要被管理服务器上存在任何一个可以使用 SSH 登录的有效账户(如默认的 root 或已有的普通用户),直接在添加主机时输入该账户的用户名和密码也可以。
把被管理服务器私钥丢到主服务器Cockpit登陆账号的.ssh中,用id_rsa命名(/home/cockpitadmin/.ssh/id_rsa.pub),.ssh文件夹设置700权限。
顺便说一下然后生成私钥公钥
# 切换到 cockpitadmin 用户
su - cockpitadmin
# 生成 SSH 密钥对(一路回车即可)
ssh-keygen -t rsa -b 4096
#拷贝公钥到被管理服务器
ssh-copy-id root@被管理服务器IP
这也就是为啥推荐多服务器使用非root账户登陆了。
调试完成以后,在左上角添加新主机。第一次添加新主机的时候它会提示你“验证主机指纹”,点击 “接受并连接” 即可。
安全加固
使用Nginx反代
关闭9090端口访问,让Nginx反代到域名访问。
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri; # 强制 HTTPS
}
server {
listen 443 ssl;
server_name yourdomain.com;
# SSL 证书配置 (推荐使用 Certbot)
ssl_certificate /etc/letsencrypt/live/://yourdomain.com;
ssl_certificate_key /etc/letsencrypt/live/://yourdomain.com;
location / {
# 转发到本地 9090,建议保持 https 即使是内网
proxy_pass https://127.0.0.1:9090;
# 必须:传递真实的 Host 和 IP
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 核心:支持 WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 避免大文件或长时间操作断开
proxy_read_timeout 86400;
}
}
同时还要让 Cockpit 允许代理访问,否则会报cockpit-tls: gnutls_handshake failed: A TLS fatal alert has been received.错误
编辑/etc/cockpit/cockpit.conf文件,添加指定域名
sudo mkdir -p /etc/cockpit
sudo bash -c 'cat <<EOF > /etc/cockpit/cockpit.conf
[WebService]
Origins = https://你的域名
ProtocolHeader = X-Forwarded-Proto
AllowUnencrypted = true
EOF'
重启 Cockpit 服务
sudo systemctl restart cockpit.socket cockpit.service
限制用户登陆
编辑?/etc/pam.d/cockpit?,在文件顶部加入这个:
auth required pam_listfile.so item=user sense=allow file=/etc/cockpit/allowed-users onerr=succeed
然后新建用户组cockpit-users,把希望允许登陆的用户加入cockpit-users组。
强制二次验证 (2FA)
安装谷歌验证插件:
sudo apt install libpam-google-authenticator
切换到对应用户运行 google-authenticator 扫码。
配置 PAM 后,Cockpit 登录界面在输入密码后会自动弹出验证码输入框。
防止暴力破解
安装Fail2Ban :
sudo apt install fail2ban
Fail2Ban 有内置的 cockpit 策略,可以直接监控日志,一旦有人尝试多次登录失败,直接封禁其 IP。
安装cockpit-navigator技巧
缘由
前面提到了Rocky、Ubuntu跟Debian的支持,实际上除了懒人包以外,也是可以到45Dirver的镜像(https://repo.45drives.com/enterprise/)去下载安装包进行安装。
笔者也发现了cockpit-navigator会强制安装全家桶,就是因为nodeps把Cockpit加上去了,而不是cockpit-bridge。导致如果是被管理端也想要使用cockpit-navigator就必须安装全家桶。所以我也反馈到了https://github.com/45Drives/cockpit-navigator/issues/103。在官方修复前,咱们就走点歪门邪道的方式处理下。
Rocky
#先下载目前最新版的cockpit-navigator安装包
wget https://repo.45drives.com/enterprise/rocky/el9/stable/x86_64/cockpit-navigator-0.5.12-1.el9.x86_64.rpm
#安装除cockpit以外的其他依赖
dnf install -y rsync zip file coreutils
#使用忽略依赖的方式进行安装
sudo rpm -ivh --nodeps cockpit-navigator*.rpm
#检查是否已经有路径跟安装显示
find / -name navigator
dnf list installed | grep cockpit
做完以上的不算完,我们还要防止下次dnf update的时候放进来
# DNF添加排除项,以后就不会再安装cockpit了
echo "exclude=cockpit" | sudo tee -a /etc/dnf/dnf.conf
# 顺便把禁止弱依赖也加上,防止以后被动安装
echo "install_weak_deps=False" | sudo tee -a /etc/dnf/dnf.conf
Debian
#先下载目前最新版的cockpit-navigator安装包
wget https://repo.45drives.com/enterprise/debian/pool/main/c/cockpit-navigator/cockpit-navigator_0.5.12-1bookworm_all.deb
#安装除cockpit以外的其他依赖
apt install -y inotify-tools libinotifytools0 zip
#使用忽略依赖的方式进行安装
sudo dpkg -i --force-depends cockpit-navigator*.deb
#检查是否已经有路径跟安装显示
find / -name navigator
dpkg -l | grep cockpit
做完以上的不算完,我们还要修复apt安装,否则每次更新都报错。
#修改安装记录 vi /var/lib/dpkg/status #找到Package: cockpit-navigator行,把下面的中的cockpit删掉 Depends: python3, rsync, zip, file, coreutils, inotify-tools
多服务器添加别名
如果管理多台服务器,默认都是使用IP地址跟登录名显示的。例如root@1.1.1.1类似这种,当然可以通过概览界面中的主机名-易读主机名设置,但是即使这样设置完毕以后,下次你再登录还是显示回用户@IP的格式。
这是因为Cockpit用的是实施传输的模式,不是数据库管理的方式。想要解决也很简单。编辑保存清单,我们加个别名就好了。
vi /etc/cockpit/machines.d/99-webui.json
在管理的机器中间加入一行"label": "Host1_Website",就像下面这样。
"1.1.1.1": {
"visible": true,
"color": "#00d39f",
"address": "1.1.1.1",
"label": "Host1_Website",
"user": "root",
"port": "22"
},
为了方便识别,也可以用emoji加到最前面
Debian:🌀 🍥
Rocky:🏔️ 🔼 🔥🏢
Ubuntu:🟠 ☀️ 🛸
顺便我们自己都能加易读名。
sudo hostnamectl set-hostname "🌀 Host1_WebSite" --pretty
sudo hostnamectl set-hostname "Nicky" --static
参考链接
- Running Cockpit:https://cockpit-project.org/running.html
- Cockpit:https://github.com/cockpit-project/cockpit
- Linux系统之Ubuntu安装cockpit管理工具:https://bbs.huaweicloud.com/blogs/422604
- 如何在 Cockpit 中管理虚拟机:https://www.51cto.com/article/721378.html
- 基于web界面管理Linux系统:http://www.360doc.com/content/24/0908/05/36367108_1133433480.shtml
- Linux可视化管理工具,Cockpit安装及使用:https://www.intoep.com/system/linux/67091.html
- Cockpit|Web 控制台图形化管理 KVM 虚拟机:https://baijiahao.baidu.com/s?id=1819281918911038260
- 45Drives:https://www.45drives.com/
- 45Drives Repo:https://repo.45drives.com/
- cockpit-navigator:https://github.com/45Drives/cockpit-navigator
- Installing helpful Cockpit modules from 45Drives:https://vkc.sh/45drives-cockpit/
- Proxying Cockpit over NGINX:https://garrett.github.io/cockpit-project.github.io/external/wiki/Proxying-Cockpit-over-NGINX
- Debian Backports Instructions:https://backports.debian.org/Instructions/
文章评论