Skip to content

BruceBee/Shell-Jumper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Shell-Jumper

一、背景说明

Shell-Jumper是一个纯shell开发的跳板机,能够满足基本的SSH免密登录跳板,登录权限控制,登录审计等功能。

二、相关实现机制

2.1、跳板机验证

同先期一样,跳板机采用RSA秘钥登录,且每个用户都拥有自己的一个账号。

同时用户只被允许连接跳板机,其他ESC不再被允许直接登录(限制SSH端口只对跳板机开放)。

2.2、跳板机登录

用户登录跳板机后,出现在用户面前的是该用户可以登录的主机列表页面,其原理是采用通用的xxx账号的秘钥进行SSH登录,返回给用户登录成功后的目的主机控制台。

这里的xxx账号,对应data/ex.sh中的user_account,请务必保持两者一致

2.3、用户登录权限控制

先期的SSH登录权限管理中,所以用户均通过xxx账号进行登录,且用户可登录的权限是通过该用户公钥是否出现在对应的ECS主机上实现的,不便于管理维护。

新的跳板机登录权限管理中,通过相关的配置文件,指定该用户可以登录的主机名称列表,在跳板机页面只供给定的主机可以登录,管理维护方便,权限控制得当。

管理员账号同样可以根据配置直接跳过跳板机进行管理。

2.4、跳板机本身的登录控制

跳板机方案实践中,作为普通用户,跳板机只做跳板用,本身不允许有登录的可能。只有管理员才具备登录维护的通道,最大限度的防止跳板机本身被攻陷。

2.5、登录审计

后续会对用户的登录登出进行日志记录

三、维护方法

3.1、/etc/profile.d/jumper.sh(登录即校验)

脚本说明:

  • 指定某几个账号的UID为管理员,不进入跳板程序

3.2、/data/jumper.sh(跳板机执行逻辑)

脚本说明:

  • 指定两个配置文件/data/conf/jumperPermission,/data/conf/jumperList,分别对应主机列表和用户权限
  • 根据登录用户获取该用户应该有的主机名称列表
  • 根据主机名称列表获取详情主机登录信息,并展示供用户选择
  • 根据用户选择进行主机的远程登录

3.3、/data/conf/jumperList(ECS信息)

脚本说明:

  • 全局跳板机主机列表必须一行一条记录
  • 记录的格式为 主机名=IP:端口,主机名自定义,最好识别性强,且主机信息不允许重复,必须唯一
  • 主机名需与/data/conf/jumperPermission内的主机名一

3.4、/data/conf/jumperPermission

脚本说明:

  • 全局用户权限列表必须一行一条记录
  • 记录的格式为 用户名=主机名1,主机名2,.... 只有1条主机权限的,不需要添加逗号,且用户权限信息不允许重复,必须唯一
  • 如果用户权限信息同时出现在/etc/profile.d/jumper.sh中,以/etc/profile.d/jumper.sh的权限为准。

3.5、/data/ex.sh

脚本说明:

  • 用户选择需要跳转登录的主机,均是通过后端的xxx账号下的秘钥和密码进行的
  • 需要将xxx账号的私钥文件存放为/home/$user/id_rsa
  • 后端主机的公钥需要定期更换, 同时跳板机对应的私钥及其密码也需要相应更换

3.6、/tmp/services.txt(查询信息)

脚本说明:

  • 此文件仅供自定义一些额外需要查询的内容,比如主机公网IP关系对应表,服务关系表等

Releases

No releases published

Packages

No packages published

Languages