mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-09 15:06:37 +08:00
parent
948653213e
commit
13a69fa1ed
2 changed files with 9 additions and 6 deletions
|
@ -55,7 +55,6 @@ func (b *BaseApi) WsSsh(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer client.Close()
|
defer client.Close()
|
||||||
|
|
||||||
sws, err := terminal.NewLogicSshWsSession(cols, rows, true, connInfo.Client, wsConn)
|
sws, err := terminal.NewLogicSshWsSession(cols, rows, true, connInfo.Client, wsConn)
|
||||||
if wshandleError(wsConn, err) {
|
if wshandleError(wsConn, err) {
|
||||||
return
|
return
|
||||||
|
@ -106,7 +105,7 @@ func (b *BaseApi) RedisWsSsh(c *gin.Context) {
|
||||||
defer killBash(redisConf.ContainerName, commands, pidMap)
|
defer killBash(redisConf.ContainerName, commands, pidMap)
|
||||||
defer slave.Close()
|
defer slave.Close()
|
||||||
|
|
||||||
tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave)
|
tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave, true)
|
||||||
if wshandleError(wsConn, err) {
|
if wshandleError(wsConn, err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -174,7 +173,7 @@ func (b *BaseApi) ContainerWsSsh(c *gin.Context) {
|
||||||
defer killBash(containerID, command, pidMap)
|
defer killBash(containerID, command, pidMap)
|
||||||
defer slave.Close()
|
defer slave.Close()
|
||||||
|
|
||||||
tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave)
|
tty, err := terminal.NewLocalWsSession(cols, rows, wsConn, slave, false)
|
||||||
if wshandleError(wsConn, err) {
|
if wshandleError(wsConn, err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,11 @@ type LocalWsSession struct {
|
||||||
slave *LocalCommand
|
slave *LocalCommand
|
||||||
wsConn *websocket.Conn
|
wsConn *websocket.Conn
|
||||||
|
|
||||||
|
allowCtrlC bool
|
||||||
writeMutex sync.Mutex
|
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 {
|
if err := slave.ResizeTerminal(cols, rows); err != nil {
|
||||||
global.LOG.Errorf("ssh pty change windows size failed, err: %v", err)
|
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{
|
return &LocalWsSession{
|
||||||
slave: slave,
|
slave: slave,
|
||||||
wsConn: wsConn,
|
wsConn: wsConn,
|
||||||
|
|
||||||
|
allowCtrlC: allowCtrlC,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,9 +97,10 @@ func (sws *LocalWsSession) receiveWsMsg(exitCh chan bool) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.LOG.Errorf("websock cmd string base64 decoding failed, err: %v", err)
|
global.LOG.Errorf("websock cmd string base64 decoding failed, err: %v", err)
|
||||||
}
|
}
|
||||||
|
if string(decodeBytes) != "\x03" || sws.allowCtrlC {
|
||||||
sws.sendWebsocketInputCommandToSshSessionStdinPipe(decodeBytes)
|
sws.sendWebsocketInputCommandToSshSessionStdinPipe(decodeBytes)
|
||||||
|
}
|
||||||
case WsMsgHeartbeat:
|
case WsMsgHeartbeat:
|
||||||
// 接收到心跳包后将心跳包原样返回,可以用于网络延迟检测等情况
|
|
||||||
err = wsConn.WriteMessage(websocket.TextMessage, wsData)
|
err = wsConn.WriteMessage(websocket.TextMessage, wsData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.LOG.Errorf("ssh sending heartbeat to webSocket failed, err: %v", err)
|
global.LOG.Errorf("ssh sending heartbeat to webSocket failed, err: %v", err)
|
||||||
|
|
Loading…
Add table
Reference in a new issue