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,
说点什么
欢迎讨论