Merge pull request #744 from midoks/dev

ssh连接优化
This commit is contained in:
Mr Chen 2025-05-24 01:16:31 +08:00 committed by GitHub
commit c77ab16f3b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 88 additions and 12 deletions

View File

@ -152,9 +152,15 @@ def getLog():
logPath = args['path']
content = mw.getLastLine(logPath, 100)
content = mw.getLastLine(logPath, 500)
return mw.returnJson(True, 'ok', content)
def getLogCb(args):
# print(args)
logPath = args['path']
content = mw.getLastLine(logPath, 3000)
return mw.returnData(True, 'ok', content)
def runShellArgs(args):
data = getCfg()
@ -190,7 +196,11 @@ def getRunShellCmd():
if 'params' in args:
param = args['params']
param = re.sub("\"", '', param)
cmd = "bash {} {}".format(shellFile, param)
cmd = ""
cmd += "git config --global credential.helper store\n"
cmd += "git config --global pull.rebase false\n"
cmd += "bash {} {}".format(shellFile, param)
return mw.returnJson(True, 'ok', cmd)

View File

@ -78,6 +78,30 @@ function whPostCallbak(method, version, args,callback){
},'json');
}
function whPostCallbakN(method, version, args,callback){
var req_data = {};
req_data['name'] = 'webhook';
req_data['func'] = method;
args['version'] = version;
if (typeof(args) == 'string'){
req_data['args'] = JSON.stringify(toArrayObject(args));
} else {
req_data['args'] = JSON.stringify(args);
}
$.post('/plugins/callback', req_data, function(data) {
if (!data.status){
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
if(typeof(callback) == 'function'){
callback(data);
}
},'json');
}
function getFileName(file){
var list = file.split('/');
var f = list[list.length-1];
@ -275,6 +299,23 @@ function getLogsTimer(path,success,error){
});
}
function getLogsTimerCb(path,success,error){
whPostCallbakN('getLogCb', "", {"path":path}, function(rdata){
var rdata = rdata.data;
if (!rdata.status){
if (typeof(error) == 'function'){
error();
}
return;
}
$('[name="site_logs"]').text(rdata.data);
if (typeof(success) == 'function'){
success();
}
});
}
//查看日志
function getLogs(path){
logs_web = layer.open({
@ -290,7 +331,7 @@ function getLogs(path){
$('[name="site_logs"]').scrollTop($('[name="site_logs"]')[0].scrollHeight);
logs_timer = setInterval(function(){
getLogsTimer(path,function(){
getLogsTimerCb(path,function(){
},function(){
layer.msg(rdata.msg,{icon:2});

View File

@ -3,6 +3,7 @@ echo "" > {$ROOT_PATH}/server/webhook/scripts/{$REPO_NAME}.log
export HOME=/tmp
date "+%Y-%m-%d %H:%M:%S"
# 和手动命令一起执行一次
git config --global credential.helper store
git config --global pull.rebase false

View File

@ -34,6 +34,7 @@ class ssh_local(object):
__log_type = 'SSH终端'
__ssh = None
__lock = False
# lock
_instance_lock = threading.Lock()
@ -61,6 +62,10 @@ class ssh_local(object):
def connectSsh(self):
if self.__lock :
return False
self.__lock = True
import paramiko
ssh = paramiko.SSHClient()
mw.createSshInfo()
@ -68,6 +73,8 @@ class ssh_local(object):
port = mw.getSSHPort()
try:
ssh.connect('127.0.0.1', 22, timeout=5)
except Exception as e:
ssh.connect('127.0.0.1', port, timeout=5)
except Exception as e:
ssh.connect('localhost', port, timeout=5)
@ -78,6 +85,8 @@ class ssh_local(object):
shell = ssh.invoke_shell(term='xterm', width=83, height=21)
shell.setblocking(0)
self.__lock = False
return shell
def send(self):
@ -108,13 +117,16 @@ class ssh_local(object):
if not self.__ssh:
self.__ssh = self.connectSsh()
if self.__ssh.exit_status_ready():
self.__ssh = self.connectSsh()
if self.__ssh:
if self.__ssh.exit_status_ready():
self.__ssh = self.connectSsh()
self.__ssh.send(info)
try:
time.sleep(0.005)
recv = self.__ssh.recv(8192)
return self.wsSend(recv)
except Exception as ex:
return self.wsSend('')
self.__ssh.send(info)
try:
time.sleep(0.005)
recv = self.__ssh.recv(8192)
return self.wsSend(recv)
except Exception as ex:
return self.wsSend('')
else:
return self.wsSend("连接中...\r\n")

View File

@ -175,7 +175,13 @@ class ssh_terminal(object):
else:
return self.connectBySocket(sid)
__lock = False
def connectLocalSsh(self, sid):
if self.__lock :
return False
self.__lock = True
mw.createSshInfo()
self.__ps = paramiko.SSHClient()
self.__ps.set_missing_host_key_policy(paramiko.AutoAddPolicy())
@ -217,9 +223,14 @@ class ssh_terminal(object):
mw.writeLog(self.__log_type, '成功登录到SSH服务器 [{}:{}]'.format(
self.__host, self.__port))
self.debug('local-ssh:通道已构建')
self.__lock = False
return self.returnMsg(True, '连接成功!')
def connectBySocket(self, sid):
if self.__lock :
return False
self.__lock = True
if not self.__host:
return self.returnMsg(False, '错误的连接地址')
if not self.__user:
@ -328,6 +339,7 @@ class ssh_terminal(object):
mw.writeLog(self.__log_type, '成功登录到SSH服务器 [{}:{}]'.format(
self.__host, self.__port))
self.debug('通道已构建')
self.__lock = False
return self.returnMsg(True, '连接成功.')
def getSshInfo(self, file):