diff --git a/server/app/socket/onekey.js b/server/app/socket/onekey.js index eee3c7e..f7df7a7 100644 --- a/server/app/socket/onekey.js +++ b/server/app/socket/onekey.js @@ -49,7 +49,7 @@ function execShell(socket, sshClient, curRes, resolve) { } stream .on('close', async () => { - // ssh连接关闭后,再执行一次输出,防止最后一次节流函数发生在延迟时间内导致终端的输出数据丢失 + // shell关闭后,再执行一次输出,防止最后一次节流函数发生在延迟时间内导致终端的输出数据丢失 await throttledDataHandler.last() // 等待最后一次节流函数执行完成,再执行一次数据输出 // console.log('onekey终端执行完成, 关闭连接: ', curRes.host) if (curRes.status === execStatusEnum.executing) { diff --git a/server/app/socket/terminal.js b/server/app/socket/terminal.js index 86fef1d..9ec9449 100644 --- a/server/app/socket/terminal.js +++ b/server/app/socket/terminal.js @@ -29,6 +29,29 @@ function createTerminal(socket, sshClient) { }) } +function execShell(sshClient, command = '', callback) { + if (!command) return + let result = '' + sshClient.exec(`source ~/.bashrc && ${ command }`, (err, stream) => { + if (err) return callback(err.toString()) + stream + .on('data', (data) => { + result += data.toString() + }) + .stderr + .on('data', (data) => { + result += data.toString() + }) + .on('close', () => { + consola.info('一次性指令执行完成:', command) + callback(result) + }) + .on('error', (error) => { + console.log('Error:', error.toString()) + }) + }) +} + module.exports = (httpServer) => { const serverIo = new Server(httpServer, { path: '/terminal', @@ -74,6 +97,11 @@ module.exports = (httpServer) => { consola.success('连接终端成功:', host) socket.emit('connect_success', `已连接到终端:${ host }`) createTerminal(socket, sshClient) + // execShell(sshClient, 'history', (data) => { + // data = data.split('\n').filter(item => item) + // console.log(data) + // socket.emit('terminal_command_history', data) + // }) }) .on('error', (err) => { console.log(err) diff --git a/web/src/views/terminal/components/command_history.vue b/web/src/views/terminal/components/command_history.vue new file mode 100644 index 0000000..bb5e307 --- /dev/null +++ b/web/src/views/terminal/components/command_history.vue @@ -0,0 +1,30 @@ + + + + \ No newline at end of file diff --git a/web/src/views/terminal/components/terminal-setting.vue b/web/src/views/terminal/components/terminal-setting.vue index 5834610..bf5dc73 100644 --- a/web/src/views/terminal/components/terminal-setting.vue +++ b/web/src/views/terminal/components/terminal-setting.vue @@ -14,11 +14,7 @@ :show-message="false" > - + + + +