Commit 967ca75a authored by ibuler's avatar ibuler

[Feature] load config from server

parent 0e9aa67c
...@@ -42,13 +42,13 @@ class Coco: ...@@ -42,13 +42,13 @@ class Coco:
'LOG_DIR': os.path.join(BASE_DIR, 'logs'), 'LOG_DIR': os.path.join(BASE_DIR, 'logs'),
'SESSION_DIR': os.path.join(BASE_DIR, 'sessions'), 'SESSION_DIR': os.path.join(BASE_DIR, 'sessions'),
'ASSET_LIST_SORT_BY': 'hostname', # hostname, ip 'ASSET_LIST_SORT_BY': 'hostname', # hostname, ip
'SSH_PASSWORD_AUTH': True, 'PASSWORD_AUTH': True,
'SSH_PUBLIC_KEY_AUTH': True, 'PUBLIC_KEY_AUTH': True,
'HEARTBEAT_INTERVAL': 5, 'HEARTBEAT_INTERVAL': 5,
'MAX_CONNECTIONS': 500, 'MAX_CONNECTIONS': 500,
'ADMINS': '', 'ADMINS': '',
'REPLAY_RECORD_ENGINE': 'server', # local, server 'COMMAND_STORAGE': {'TYPE': 'server'}, # server
'COMMAND_RECORD_ENGINE': 'server', # local, server, elasticsearch(not yet) 'REPLAY_RECORD_ENGINE': 'server',
} }
def __init__(self, name=None, root_path=None): def __init__(self, name=None, root_path=None):
...@@ -93,13 +93,13 @@ class Coco: ...@@ -93,13 +93,13 @@ class Coco:
def make_logger(self): def make_logger(self):
create_logger(self) create_logger(self)
# Todo: load some config from server like replay and common upload
def load_extra_conf_from_server(self): def load_extra_conf_from_server(self):
pass configs = self.service.load_config_from_server()
self.config.update(configs)
def initial_recorder(self): def get_recorder_class(self):
self.replay_recorder_class = get_replay_recorder_class(self) self.replay_recorder_class = get_replay_recorder_class(self.config)
self.command_recorder_class = get_command_recorder_class(self) self.command_recorder_class = get_command_recorder_class(self.config)
def new_command_recorder(self): def new_command_recorder(self):
return self.command_recorder_class(self) return self.command_recorder_class(self)
...@@ -111,7 +111,7 @@ class Coco: ...@@ -111,7 +111,7 @@ class Coco:
self.make_logger() self.make_logger()
self.service.initial() self.service.initial()
self.load_extra_conf_from_server() self.load_extra_conf_from_server()
self.initial_recorder() self.get_recorder_class()
self.keep_heartbeat() self.keep_heartbeat()
self.monitor_sessions() self.monitor_sessions()
......
...@@ -43,9 +43,9 @@ class SSHInterface(paramiko.ServerInterface): ...@@ -43,9 +43,9 @@ class SSHInterface(paramiko.ServerInterface):
def get_allowed_auths(self, username): def get_allowed_auths(self, username):
supported = [] supported = []
if self.app.config["SSH_PASSWORD_AUTH"]: if self.app.config["PASSWORD_AUTH"]:
supported.append("password") supported.append("password")
if self.app.config["SSH_PUBLIC_KEY_AUTH"]: if self.app.config["PUBLIC_KEY_AUTH"]:
supported.append("publickey") supported.append("publickey")
return ",".join(supported) return ",".join(supported)
......
...@@ -11,7 +11,7 @@ import gzip ...@@ -11,7 +11,7 @@ import gzip
import json import json
import shutil import shutil
from jms_es_storage import ESStore from jms_es_sdk import ESStore
from .alignment import MemoryQueue from .alignment import MemoryQueue
...@@ -237,17 +237,17 @@ class ESCommandRecorder(CommandRecorder, metaclass=Singleton): ...@@ -237,17 +237,17 @@ class ESCommandRecorder(CommandRecorder, metaclass=Singleton):
print("{} has been gc".format(self)) print("{} has been gc".format(self))
def get_command_recorder_class(app): def get_command_recorder_class(config):
command_engine = app.config["COMMAND_RECORD_ENGINE"] command_storage = config["COMMAND_STORAGE"]
if command_engine == "elasticsearch": if command_storage['TYPE'] == "elasticsearch":
return ESCommandRecorder return ESCommandRecorder
else: else:
return ServerCommandRecorder return ServerCommandRecorder
def get_replay_recorder_class(app): def get_replay_recorder_class(config):
replay_engine = app.config["REPLAY_RECORD_ENGINE"] replay_engine = config["REPLAY_RECORD_ENGINE"]
if replay_engine == "server": if replay_engine == "server":
return ServerReplayRecorder return ServerReplayRecorder
else: else:
......
...@@ -89,7 +89,7 @@ class SSHServer: ...@@ -89,7 +89,7 @@ class SSHServer:
def dispatch(self, client): def dispatch(self, client):
request_type = client.request.type request_type = client.request.type
if request_type == 'pty': if request_type == 'pty' or request_type == 'x11':
logger.info("Request type `pty`, dispatch to interactive mode") logger.info("Request type `pty`, dispatch to interactive mode")
InteractiveServer(self.app, client).interact() InteractiveServer(self.app, client).interact()
elif request_type == 'exec': elif request_type == 'exec':
......
...@@ -49,10 +49,10 @@ class Config: ...@@ -49,10 +49,10 @@ class Config:
# ASSET_LIST_SORT_BY = 'ip' # ASSET_LIST_SORT_BY = 'ip'
# 登录是否支持密码认证 # 登录是否支持密码认证
# SSH_PASSWORD_AUTH = True # PASSWORD_AUTH = True
# 登录是否支持秘钥认证 # 登录是否支持秘钥认证
# SSH_PUBLIC_KEY_AUTH = True # PUBLIC_KEY_AUTH = True
# 和Jumpserver 保持心跳时间间隔 # 和Jumpserver 保持心跳时间间隔
# HEARTBEAT_INTERVAL = 5 # HEARTBEAT_INTERVAL = 5
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment