@@ -180,21 +180,24 @@ func (s *Server) ConnStats() ConnStats {
180
180
}
181
181
182
182
func (s * Server ) sessionHandler (session ssh.Session ) {
183
+ logger := s .logger .With (slog .F ("remote_addr" , session .RemoteAddr ()), slog .F ("local_addr" , session .LocalAddr ()))
184
+ logger .Info (session .Context (), "handling ssh session" )
185
+ ctx := session .Context ()
183
186
if ! s .trackSession (session , true ) {
184
187
// See (*Server).Close() for why we call Close instead of Exit.
185
188
_ = session .Close ()
189
+ logger .Info (ctx , "unable to accept new session, server is closing" )
186
190
return
187
191
}
188
192
defer s .trackSession (session , false )
189
193
190
- ctx := session .Context ()
191
-
192
194
extraEnv := make ([]string , 0 )
193
195
x11 , hasX11 := session .X11 ()
194
196
if hasX11 {
195
197
handled := s .x11Handler (session .Context (), x11 )
196
198
if ! handled {
197
199
_ = session .Exit (1 )
200
+ logger .Error (ctx , "x11 handler failed" )
198
201
return
199
202
}
200
203
extraEnv = append (extraEnv , fmt .Sprintf ("DISPLAY=:%d.0" , x11 .ScreenNumber ))
@@ -206,25 +209,26 @@ func (s *Server) sessionHandler(session ssh.Session) {
206
209
s .sftpHandler (session )
207
210
return
208
211
default :
209
- s . logger .Debug (ctx , "unsupported subsystem" , slog .F ("subsystem" , ss ))
212
+ logger .Warn (ctx , "unsupported subsystem" , slog .F ("subsystem" , ss ))
210
213
_ = session .Exit (1 )
211
214
return
212
215
}
213
216
214
217
err := s .sessionStart (session , extraEnv )
215
218
var exitError * exec.ExitError
216
219
if xerrors .As (err , & exitError ) {
217
- s . logger .Warn (ctx , "ssh session returned" , slog .Error (exitError ))
220
+ logger .Info (ctx , "ssh session returned" , slog .Error (exitError ))
218
221
_ = session .Exit (exitError .ExitCode ())
219
222
return
220
223
}
221
224
if err != nil {
222
- s . logger .Warn (ctx , "ssh session failed" , slog .Error (err ))
225
+ logger .Warn (ctx , "ssh session failed" , slog .Error (err ))
223
226
// This exit code is designed to be unlikely to be confused for a legit exit code
224
227
// from the process.
225
228
_ = session .Exit (MagicSessionErrorCode )
226
229
return
227
230
}
231
+ logger .Info (ctx , "normal ssh session exit" )
228
232
_ = session .Exit (0 )
229
233
}
230
234
@@ -565,7 +569,12 @@ func (s *Server) CreateCommand(ctx context.Context, script string, env []string)
565
569
return cmd , nil
566
570
}
567
571
568
- func (s * Server ) Serve (l net.Listener ) error {
572
+ func (s * Server ) Serve (l net.Listener ) (retErr error ) {
573
+ s .logger .Info (context .Background (), "started serving listener" , slog .F ("listen_addr" , l .Addr ()))
574
+ defer func () {
575
+ s .logger .Info (context .Background (), "stopped serving listener" ,
576
+ slog .F ("listen_addr" , l .Addr ()), slog .Error (retErr ))
577
+ }()
569
578
defer l .Close ()
570
579
571
580
s .trackListener (l , true )
@@ -580,15 +589,23 @@ func (s *Server) Serve(l net.Listener) error {
580
589
}
581
590
582
591
func (s * Server ) handleConn (l net.Listener , c net.Conn ) {
592
+ logger := s .logger .With (
593
+ slog .F ("remote_addr" , c .RemoteAddr ()),
594
+ slog .F ("local_addr" , c .LocalAddr ()),
595
+ slog .F ("listen_addr" , l .Addr ()))
583
596
defer c .Close ()
584
597
585
598
if ! s .trackConn (l , c , true ) {
586
599
// Server is closed or we no longer want
587
600
// connections from this listener.
588
- s . logger .Debug (context .Background (), "received connection after server closed" )
601
+ logger .Info (context .Background (), "received connection after server closed" )
589
602
return
590
603
}
591
604
defer s .trackConn (l , c , false )
605
+ logger .Info (context .Background (), "started serving connection" )
606
+ defer func () {
607
+ logger .Info (context .Background (), "stopped serving connection" )
608
+ }()
592
609
593
610
s .srv .HandleConn (c )
594
611
}
0 commit comments