OliveTin 如何让你无需 SSH 就能从浏览器运行服务器 bash 脚本
我喜欢 SSH,但我不喜欢每次运行那些无聊的命令时都必须打开它并记住用户名和密码。正是这个小小的烦恼促使我一开始就开始了这个项目。
我在我的家庭实验室里有几台服务器,但有一台特别需要持续关注,进行磁盘空间检查、备份和更新,因为它控制着家庭自动化。这些工作并不困难,而且其中一些是自动化的。但那些小而烦人的手动任务感觉太小了,不值得开一个 SSH 会话去处理。
OliveTin 用一种非常简单的方式解决了这个问题。它让我可以将自己的 Bash 脚本变成浏览器按钮,可以在我的家庭网络上随时访问和点击。在我的 Debian 家庭运维服务器上本地安装 OliveTin 后,我把又一次安全 SSH 会话的不便变成了真正的工具。
我真正需要的是一个按钮面板,而不是另一个管理命令中心
OliveTin 足够简单,以至于不会妨碍使用
我不想让我的家庭运维服务器变成另一个仪表盘。那是因为我运行的是家庭实验室,而不是休斯顿的指挥中心,而且我生活中已经有足够多没用的仪表盘。我需要的是更简单的东西。只是一个私有页面,上面有几个我已经信任的脚本的按钮。我不需要的是图表、小部件、插件或完整的服务器管理控制台。
在这里使用 OliveTin 非常合理,因为它基本上是一个预定义命令的网页启动器,非常适合智能家居升级、自动化和个人服务器管理。我需要一些按钮来处理例如服务器健康报告、存储报告、开启和关闭 SSH 及防火墙,以及关闭服务器这样的事情。OliveTin 完全按其名字所示的功能运作。
使用 OliveTin,我编写了脚本,定义了操作,而 OliveTin 在网页服务器上运行,将它们变成一个有用的基于浏览器的应用程序。OliveTin 的安装非常简单。我在家用 Debian 服务器上本地安装了它,编辑了其配置文件,并启用了服务:
sudo apt install ./OliveTin_linux_amd64.deb
sudo systemctl enable --now OliveTin由于 OliveTin 使用端口 1337,我在 Debian UFW 防火墙上允许了该端口,然后为 OliveTin 创建了一个小的测试配置,其中包含一个简单的按钮,用于返回一些基本的系统信息,仅作为测试以查看一切是否正常运行:
actions:
- title: "Hello from home-ops"
icon: "👋"
popupOnStart: execution-dialog-stdout-only
shell: echo "OliveTin is running natively on $(hostname) at $(date)"然后我重新启动了服务:
sudo systemctl restart OliveTin这个按钮本身并没有做任何有用的事情,但这正是重点。我只需要证明服务正在运行,页面已经加载,并且 OliveTin 可以在浏览器中显示命令输出。
OliveTin 按钮可以使用 HTML 实体代码来显示图标,因此您可以在 YAML 中添加小表情标签,让仪表盘更美观。
我前几个 OliveTin 按钮取代了所有无聊的服务器脚本
健康检查、存储报告、服务状态,所有我写脚本做的事情,但之后都被忽视了,直到出了问题
测试按钮可以使用后,是时候用 OliveTin 上的酷按钮来替换所有我本该更频繁检查的东西了。这就是我一半家庭服务器维护工作的相当尴尬的事实。我已经知道需要哪些命令。我甚至为大多数命令写了脚本。我只是懒得通过 SSH 登录去运行它们。
所以,我在 OliveTin 中制作的第一个按钮是用于运行基本服务器管理任务的脚本:
- 服务器健康
- 存储报告
- 服务状态
- 软件包更新和升级
- 系统配置备份
- 防火墙状态
服务器健康按钮将我通常手动运行的所有 Linux 监控命令集中在一起,一次性执行。按钮关联的脚本只是运行基本检查,然后以一种漂亮、易于人类阅读的格式返回结果:
uptime
free -h
df -h /其他脚本显示了负载平均值和顶级 CPU 进程,这让我在不打开终端的情况下也能很好地了解服务器。存储按钮生成了有关可用磁盘空间、文件系统使用情况以及最大的/var 目录的报告。服务
状态按钮选中 SSH、OliveTin 本身和 Docker。
添加一个备份按钮让 OliveTin 感觉像一个真正的工具
把所有零散的脚本整理成按钮后,我拥有了一个强大的内部工具
一旦监控工具的所有按钮都能正常使用,我创建了一个新的脚本和按钮,用于归档如果我在摆弄过程中严重搞坏了某些东西时最想恢复的配置文件。它会抓取如主机名、hosts 文件、SSH 配置、防火墙设置以及 OliveTin 的配置文件等项目。
tar -czf "$BACKUP_FILE" /etc/hostname /etc/hosts /etc/ssh /etc/ufw /etc/OliveTin这没什么了不起的,本质上只是一个用 Bash 封装 tar 的脚本。但一旦有了专门的按钮,而不是只是将它分配给 cron 任务并希望它能继续运行,结果感觉就不一样了。是的,本质上还是 Bash,但 OliveTin 让一个松散的脚本不再觉得是运行的负担,并且终于意味着我为家庭运维服务器做好了正确的构建。
然后我又添加了一些更强大的按钮
从浏览器重启 SSH 并更改防火墙很有用,但需要谨慎
在无害检查和备份按钮工作正常之后,我添加了一些需要更小心的按钮,因为它们可能会将 OliveTin 和我都锁出服务器:
- 启用防火墙
- 禁用防火墙
- 检查防火墙规则
- 启用 SSH
- 禁用 SSH
这些仍然是连接到简单 Bash 脚本的简单按钮:
systemctl start ssh
systemctl stop ssh
systemctl is-active ssh这种简洁性正是使 OliveTin 非常强大的原因。如果 SSH 会话变得无响应,或者我需要快速关闭防火墙进行故障排除,这个选项就在那儿,可以随时开关。不过,如果我在无头服务器上点击了错误的按钮,我最好手头有控制台访问权限或其他方式可以重新进入。
在我的家庭运维服务器上,这运行得很好,因为我控制着环境,并且完全清楚每个按钮的功能。如果我的猫以某种方式通过 OliveTin 把我锁在自己的服务器之外,我也有一个回到系统的方法。但在公共 VPS 或任何面向公众的服务上,显然不建议在没有某种形式的身份验证的情况下运行 OliveTin。
我给自己设置了重启和关机按钮
然后我立刻添加了一个取消按钮
OliveTin 上的重启和关机按钮非常有意义,我最终会在其他需要在突发断电等情况下快速关机的服务器上添加相同的按钮。在添加了关机按钮后,不小心点击了它,我决定我还需要一个定时器和一个取消按钮。
我修改了初始的关机 Bash 脚本,加入了一分钟的计时器:
shutdown -r +1 "Restart requested from OliveTin"然后我在它们旁边添加了一个取消动作按钮:
shutdown -c那微小的延迟给了我足够的时间在家用操作服务器宕机之前完全取消操作,否则我所有的自动化智能家居照明控制都会随之中断。这是一个很好的提醒,像这样的强大功能确实需要安全带。
我不会直接将这个暴露在互联网上
OliveTin 很有用,因为它可以运行命令,这也是它不适合放在你的 VPS 上的原因
OliveTin 支持诸如身份验证、用户、群组和访问控制等适当的安全功能,但这并不意味着你应该将整页服务器按钮暴露给全球互联网。
对于我的家庭运维服务器,我首选的模型是仅限受信任访问。确保端口 1337 仅限本地访问非常重要,如果我确实需要从网络外部访问,那么我可以将它放在像 Tailscale 这样的东西后面,而不是端口转发。
为什么我不使用 OliveTin 内置的登录支持来保护它的问题依然存在,这是一个合理的问题。我的答案是,它不是一个普通的网页应用,因为它的全部工作是运行命令,这足以改变威胁模型,从而值得将其放在我的防火墙之后。
我会保留它,但只针对我已经信任的脚本
OliveTin 并没有替代 SSH,但它移除了很多无意义的 SSH 会话
OliveTin 从来不打算成为一个完整的服务器管理面板,这也正是我想要它的原因。它更好,因为它只显示我已经有脚本的任务。如果没有按钮或脚本,它就不能随便创建一个并运行。
我仍然需要 SSH 来处理真正的 Linux 服务器工作,比如配置编辑和日志工作,没有浏览器按钮可以取代这一点。但对于那些我自己写脚本的小任务,OliveTin 非常适合。那是因为必须通过 SSH 执行这些任务意味着我会因为懒惰而不去运行这些任务,结果我的服务器性能因此受到了影响。
所以,我会把 OliveTin 保留在我的家庭操作服务器上,并且实际上会将它推广到我一直忽略的其他服务器上。我仍然需要 SSH 来做真正的工作,我只是每次需要运行一个无聊的脚本时,不想每次都打开它。为此,一个按钮要方便得多。










