基于gateone搭建web ssh

web ssh介绍

  • 对于云厂商来说,虚拟机的web ssh登录应该是必不可少的一个功能,比如机器的ssh如果有问题,本地终端无法登录时,可以通过web ssh进入(不过是使用vnc),解决突发问题,同时页面操作也方便一些小白或者比较懒的用户。

  • 对于公司内网来说,一般公司都会搭建堡垒机,做鉴权和登录控制,但对于内部发布系统、paas系统之类的,用户仍然有web登录机器的需求。

  • 也可以参考这篇文章的描述

调研方案

调研了几种方案,本来想用jumpserver,功能齐全,用户组管理,日志,安全审计都完备,可就是太重了,我们只是要一个免密登录功能而已。

最后选了gateone,前端web页面控制哪些用户可以登入,后端跳转到一台跳板机,跳板机上搭建gateone的server,配置好统一的用户和密码,设置好过期时间,同时登录的人数,以及对登录日志做简单处理,吐到日志系统中(ES), 以供排查。

搭建gateone

geteone server的搭建:参考这篇文章即可[geteone]

var ip = $("#ip").html();
        var ssh_url = 'ssh://tmp_user' + '@' + ip + ':' + 22;
        var request = $.ajax({
            url: '/generate_gate_one_auth_obj',
            type: "GET",
            dataType: "json"
        });
        request.done(function (auth_info) {
            GateOne.init({
                auth: auth_info["auth"],
                url: auth_info["url"],
                scrollback: 10000,
                disableTermTransitions: 'true',
                autoConnectURL: ssh_url
            });
        });
        GateOne.Base.superSandbox("GateOne.SomePlugin", ["GateOne", "GateOne.Net", "GateOne.Terminal.Input", "GateOne.Terminal"], function (window, undefined) {
            var location = ip;
            GateOne.prefs.autoConnectURL = ssh_url;
            GateOne.locations;
            GateOne.Net.setLocation(location);
            $("#go_default_toolbar").remove();
            $("#go_default_sideinfo").remove();
            /*这里设置的作用在于记录和保持ssh登陆的状态,只要不logout或者断开session,关闭页面后打开还会回到上次的状态  */
        });

generate_gate_one_auth_obj:主要获取认证的信息

    authobj = {
        'api_key': api_key,
        'upn': "gate_one",
        'timestamp': str(int(time.time() * 1000)),
        'signature_method': 'HMAC-SHA1',
        'api_version': '1.0'
    }

go_default_toolbar 是页面加载后右侧的配置栏,用于配置用户登录私钥的位置,不需要对用户开放,直接remove掉。该工具栏也提供多窗口登录,因为我们限制了机器单用户登录,用户也不需要。

只允许单窗口的配置:

"js_init": "{showToolbar: false, showTitle: false}",

"max_terms": 1,

Written by

说点什么

欢迎讨论

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒