首页 > 代码库 > SRE/DevOps:内网集群管理套件【2、说明文档】
SRE/DevOps:内网集群管理套件【2、说明文档】
【客户端】
一、初始化模块
- 检查客户端本地的 sshd 守护进程是否已启动
- 检查客户端本地的 SSH 公钥认证相关文件的名称及权限
- id_rsa.pub
- authorized_keys
- 检测云端是否在线
- 建立 TCP 连接,发送一个 ‘?‘ 至云端,若收到云端回应的 ‘!‘,则表示云端正常在线,若云端无响应,睡眠 5s 后重复此过程
- 从云端获取连接账号及用于 SSH 远程转发的端口
-
- 若 ~/.ssh/ssh_tun_passwd 文件(内含云端账号名称)不存在,发送一个 ‘0‘ 至云端,请求新建账号,收到账号名称后写入 ssh_tun_passwd 文件(初始密码与账号名称相同)
- 若文件在且格式正确,且在云端匹配成功,则以此账号连接(云端回复 ‘1‘ 代表匹配,‘0‘ 代表不匹配)
- 若文件不符合格式要求(文件长度 >= 4B)或云端无匹配项,提示用户“ssh_tun_passwd 内容有误,若需新建账号,请重命名或删除此文件“)
- 用云端回复的端口(从云端收到的 1xxxxx 字符数组中提取后五位)号建立 SSH 反向连接隧道
-
- 更新云端公钥库
- 若该客户端为主节点(以 -p 选项启动),连接成功后,以本地 ~/.ssh/ 目录下所有名称以 “id_rsa.pub” 开头的文件(每个文件可含多个公钥)上传至云端替换原 authorized_keys 文件内容
二、监控模块
- 等待 SSH 反向连接子进程的退出,若退出说明连接已断开,则重新执行初始化模块
【云端】
一、初始化模块
- 设置权限与流量控制策略
- 检查并设置系统全局目录权限
- /root 与 /ssh_tun/USER_HOMEs 权限:0700
- 其它所有目录取消 other 的读权限
- 禁止普通用户通过 ps、top 等程序查看其它用户进程的信息
- 限制每个 SSH 隧道的外出方向网络带宽,如 20Kbps/s
- 检查并设置系统全局目录权限
- 检查 sshd 守护进程状态
- 向 www.ip3322.net 注册 IP 地址,确保动态域名有效
- 启动一个本地客户进程,用于服务端自检动态域名有效性
二、监控模块
- 通过 KQueue 等待客户端连接
- 远程客户端
- 本地自检客户端
- 每 5s 自检一次
- 若出现异常,重新执行初始化模块
三、行为模块
- 回应客户端请求
- 收到 ‘?‘ 状态确认请求,回复 ‘!‘
- 收到登陆请求
- 若收到的是数字 ‘0‘,即代表客户端不存在 ssh_tun_passwd 文件,创建新账号并回复账号名称
- 否则检索云端用户列表
- 若存在此账户,回复 ‘1‘ + 端口号
- 若不存在,回复 ‘0‘
- 检索账户名称
- 维护一个 /SSH/account_database 文件,以 unsigned short 二进制格式存储已注册的账户名称,账户以纯数字递增顺序命名
- 检索空闲端口
- 维护一个 /SSH/idle_port_database 文件,预先写入全部可用端口号,以 unsigned short 二进制存储
- 取用端口时从文件末尾读取 sizeof(short int) 个字节,然后 truncate 掉末尾 sizeof(short int) 个字节
- 端口用完归还时,在文件末尾追加写入
- 调用外部程序 ipfw 开放已分配的端口,关闭已归还的端口
- 回收失效的套接字与 SSH 转发端口
- 内存中维护一个单向链表数组(struct z_so_ssh_info *CurInfo[64]),用于存储已分配的套接字、SSH 传发端口等信息,以套接字值除以 64 的余数为数组下标进行 HASH
- 每小时检查一次所有外部客户端的心跳记录,回收其所占用的系统资源
SRE/DevOps:内网集群管理套件【2、说明文档】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。