From f1c3a52d6a9180a21fc376010d240af73a9f1b5b Mon Sep 17 00:00:00 2001 From: Henry Barreto Date: Fri, 11 Apr 2025 17:45:23 -0300 Subject: [PATCH] fix(ssh): start the session piping only after send the pty-req --- ssh/server/channels/session.go | 6 +++--- ssh/session/session.go | 10 ++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ssh/server/channels/session.go b/ssh/server/channels/session.go index aa762492ef5..b429150d2dd 100644 --- a/ssh/server/channels/session.go +++ b/ssh/server/channels/session.go @@ -138,8 +138,6 @@ func DefaultSessionHandler() gliderssh.ChannelHandler { defer agent.Close() - go pipe(sess, client.Channel, agent.Channel, seat) - // TODO: Add middleware to block certain types of requests. for { select { @@ -239,7 +237,9 @@ func DefaultSessionHandler() gliderssh.ChannelHandler { sess.Pty = pty - sess.Event(req.Type, pty, seat) //nolint:errcheck + sess.Event(req.Type, pty, seat) + + go pipe(sess, client.Channel, agent.Channel, seat) case WindowChangeRequestType: var dimensions models.SSHWindowChange diff --git a/ssh/session/session.go b/ssh/session/session.go index 01e8c405664..4739cdd47b3 100644 --- a/ssh/session/session.go +++ b/ssh/session/session.go @@ -536,13 +536,19 @@ func (s *Session) NewSeat() (int, error) { // Events register an event to the session. func (s *Session) Event(t string, data any, seat int) { - s.Events.WriteJSON(&models.SessionEvent{ //nolint:errcheck + if err := s.Events.WriteJSON(&models.SessionEvent{ //nolint:errcheck Session: s.UID, Type: models.SessionEventType(t), Timestamp: clock.Now(), Data: data, Seat: seat, - }) + }); err != nil { + log.WithError(err).WithFields(log.Fields{ + "event": t, + "data": data, + "seat": seat, + }).Error("failed to register a event") + } } func Event[D any](sess *Session, t string, data []byte, seat int) {