0x00 背景

手上的服务器越来越多,实在是受不了每次都手动登陆上去管了,就在想有什么方法能够实现轻便的自动化运维,需求大概如下:

  • 尽量不暴露额外端口,即需要基于SSH进行操作管理
  • 支持上传/下载文件
  • 支持批量节点管理
    • 服务器监控
    • 远程管理服务
    • ……

0x01 相关服务器管理面板调研

Ajenti

安装

sudo pip3 install setuptools pip wheel -U
# 最小化安装
pip3 install ajenti-panel ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.settings ajenti.plugin.plugins
# 完整安装
pip3 install ajenti-panel ajenti.plugin.ace ajenti.plugin.augeas ajenti.plugin.auth-users ajenti.plugin.core ajenti.plugin.dashboard ajenti.plugin.datetime ajenti.plugin.filemanager ajenti.plugin.filesystem ajenti.plugin.network ajenti.plugin.notepad ajenti.plugin.packages ajenti.plugin.passwd ajenti.plugin.plugins ajenti.plugin.power ajenti.plugin.services ajenti.plugin.settings ajenti.plugin.terminal

# 启动/暂停/重启
ajenti-panel start

可行性分析

优点

  • 安装的每一个都是可以独立自行管理的受控端
  • 除了核心基本模块,其余模块都是以插件形式运行,支持终端、Docker、Cron等的基本管理
  • 开源,可以定制插件,适配不同的需求
  • 不臃肿,可以根据需要加载插件

缺点

  • 没有控制中心插件,故不支持多节点管理,需要自行定制化

Appnode

安装

# 宿主机
INSTALL_AGENT=1 bash -c "$(curl -sS http://dl.appnode.com/install.sh)"

可行性分析

优点

  • 分为控制中心和受控端
  • 基本上的功能都封装好了,还支持各种API,文档也挺全

缺点

  • 相比于Ajenti优点臃肿(受控端装了很多用不着的东西
  • 不能安装在容器里(不能忍

Tower

Cockpit

Zabbix

可行性分析

优点

  • 监控齐全
  • 可以执行255字符以内命令
    • 但不支持proxy及主动agent模式,即需要节点监听端口

缺点

  • 依赖Zabbix-Agent
    • 初次部署时,还是要人工登陆进行安装
    • Zabbix-Agent挂了时,相当于节点失联

0x02 相关框架调研

Paramiko

这个包功能特别的丰富,对于自动化运维来说,只需要用到与Client相关的就行(特别是支持密码或密钥登陆)。

Invoke

因为Invoke是在Fabric2.x的时候独立出来的一个项目,所以他在设计上,就是为自动化运维而生的(最香的是封装了本地shell执行)

Click

Click was written to support the Flask microframework ecosystem because no tool could provide it with the functionality it needed.

Click是Flask开发团队用于支撑flask的一个命令行工具(我就觉得他跟flask command的封装有些相似),所以他的工作完全在优化兼容不同系统下的命令行模式,对于自动化运维来说,他比Invoke少了支持shell命令的运行,就意味着要自己去封装实现。

0x03 总结

经过上面的一通分(hu shuo)析 (ba dao),发现还是基于Paramiko和Invoke的方案比较成熟,而Fabric就是基于这两者实现的,所以接下来会试用一下Fabric,了解一下它的逻辑以及是否满足需求,再看看是否需要自己重复造轮子。