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,了解一下它的逻辑以及是否满足需求,再看看是否需要自己重复造轮子。