diff --git a/backend/app/api/v1/terminal.go b/backend/app/api/v1/terminal.go index 7a2002d31..da62dc2ed 100644 --- a/backend/app/api/v1/terminal.go +++ b/backend/app/api/v1/terminal.go @@ -55,7 +55,6 @@ func (b *BaseApi) WsSsh(c *gin.Context) { return } defer client.Close() - sws, err := terminal.NewLogicSshWsSession(cols, rows, true, connInfo.Client, wsConn) if wshandleError(wsConn, err) { return @@ -106,7 +105,7 @@ func (b *BaseApi) RedisWsSsh(c *gin.Context) { defer killBash(redisConf.ContainerName, commands, pidMap) defer slave.Close() - tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave) + tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave, true) if wshandleError(wsConn, err) { return } @@ -174,7 +173,7 @@ func (b *BaseApi) ContainerWsSsh(c *gin.Context) { defer killBash(containerID, command, pidMap) defer slave.Close() - tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave) + tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave, false) if wshandleError(wsConn, err) { return } diff --git a/backend/utils/terminal/ws_local_session.go b/backend/utils/terminal/ws_local_session.go index d9221b6cc..cc5aa6c61 100644 --- a/backend/utils/terminal/ws_local_session.go +++ b/backend/utils/terminal/ws_local_session.go @@ -14,10 +14,11 @@ type LocalWsSession struct { slave *LocalCommand wsConn *websocket.Conn + allowCtrlC bool writeMutex sync.Mutex } -func NewLocalWsSession(cols, rows int, wsConn *websocket.Conn, slave *LocalCommand) (*LocalWsSession, error) { +func NewLocalWsSession(cols, rows int, wsConn *websocket.Conn, slave *LocalCommand, allowCtrlC bool) (*LocalWsSession, error) { if err := slave.ResizeTerminal(cols, rows); err != nil { global.LOG.Errorf("ssh pty change windows size failed, err: %v", err) } @@ -25,6 +26,8 @@ func NewLocalWsSession(cols, rows int, wsConn *websocket.Conn, slave *LocalComma return &LocalWsSession{ slave: slave, wsConn: wsConn, + + allowCtrlC: allowCtrlC, }, nil } @@ -94,9 +97,10 @@ func (sws *LocalWsSession) receiveWsMsg(exitCh chan bool) { if err != nil { global.LOG.Errorf("websock cmd string base64 decoding failed, err: %v", err) } - sws.sendWebsocketInputCommandToSshSessionStdinPipe(decodeBytes) + if string(decodeBytes) != "\x03" || sws.allowCtrlC { + sws.sendWebsocketInputCommandToSshSessionStdinPipe(decodeBytes) + } case WsMsgHeartbeat: - // 接收到心跳包后将心跳包原样返回,可以用于网络延迟检测等情况 err = wsConn.WriteMessage(websocket.TextMessage, wsData) if err != nil { global.LOG.Errorf("ssh sending heartbeat to webSocket failed, err: %v", err)