Skip to content

Commit 11fb056

Browse files
committed
session error
1 parent 000586a commit 11fb056

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

agent/agentssh/agentssh.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,25 +198,37 @@ func (s *Server) sessionHandler(session ssh.Session) {
198198
return
199199
}
200200

201-
err := s.sessionStart(session, extraEnv)
201+
m := metricsForSession(magicType(session))
202+
err := s.sessionStart(session, m, extraEnv)
202203
var exitError *exec.ExitError
203204
if xerrors.As(err, &exitError) {
204-
s.logger.Debug(ctx, "ssh session returned", slog.Error(exitError))
205+
s.logger.Warn(ctx, "ssh session returned", slog.Error(exitError))
206+
m.sessionError.Add(1)
205207
_ = session.Exit(exitError.ExitCode())
206208
return
207209
}
208210
if err != nil {
209211
s.logger.Warn(ctx, "ssh session failed", slog.Error(err))
210212
// This exit code is designed to be unlikely to be confused for a legit exit code
211213
// from the process.
212-
metricSessionError.Add(1)
214+
m.sessionError.Add(1)
213215
_ = session.Exit(MagicSessionErrorCode)
214216
return
215217
}
216218
_ = session.Exit(0)
217219
}
218220

219-
func (s *Server) sessionStart(session ssh.Session, extraEnv []string) (retErr error) {
221+
func magicType(session ssh.Session) string {
222+
for _, kv := range session.Environ() {
223+
if !strings.HasPrefix(kv, MagicSessionTypeEnvironmentVariable) {
224+
continue
225+
}
226+
return strings.TrimPrefix(kv, MagicSessionTypeEnvironmentVariable+"=")
227+
}
228+
return ""
229+
}
230+
231+
func (s *Server) sessionStart(session ssh.Session, m sessionMetricsObject, extraEnv []string) (retErr error) {
220232
ctx := session.Context()
221233
env := append(session.Environ(), extraEnv...)
222234
var magicType string
@@ -241,7 +253,6 @@ func (s *Server) sessionStart(session ssh.Session, extraEnv []string) (retErr er
241253
s.logger.Warn(ctx, "invalid magic ssh session type specified", slog.F("type", magicType))
242254
}
243255

244-
m := metricsForSession(magicType)
245256
cmd, err := s.CreateCommand(ctx, session.RawCommand(), env)
246257
if err != nil {
247258
m.agentCreateCommandError.Add(1)

agent/agentssh/metrics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ var (
1414
metricReversePortForwardingCallback = clientmetric.NewCounter("ssh_reverse_port_forwarding_callback")
1515
metricX11Callback = clientmetric.NewCounter("ssh_x11_callback")
1616

17-
metricSessionError = clientmetric.NewCounter("ssh_session_error")
18-
1917
// PTY sessions
2018

2119
// SFTP
@@ -37,6 +35,7 @@ type sessionMetricsObject struct {
3735
agentListenerError *clientmetric.Metric
3836
startPTYSession *clientmetric.Metric
3937
startNonPTYSession *clientmetric.Metric
38+
sessionError *clientmetric.Metric
4039

4140
// Non-PTY sessions
4241
nonPTYStdinPipeError *clientmetric.Metric
@@ -60,6 +59,7 @@ func init() {
6059
agentListenerError: clientmetric.NewCounter(fmt.Sprintf("ssh_agent_%s_listener_error", magicType)),
6160
startPTYSession: clientmetric.NewCounter(fmt.Sprintf("ssh_agent_%s_start_pty_session", magicType)),
6261
startNonPTYSession: clientmetric.NewCounter(fmt.Sprintf("ssh_agent_%s_start_non_pty_session", magicType)),
62+
sessionError: clientmetric.NewCounter(fmt.Sprintf("ssh_agent_%s_session_error", magicType)),
6363

6464
nonPTYStdinPipeError: clientmetric.NewCounter(fmt.Sprintf("ssh_server_%s_non_pty_stdin_pipe_error", magicType)),
6565
nonPTYStdinIoCopyError: clientmetric.NewCounter(fmt.Sprintf("ssh_server_%s_non_pty_stdin_io_copy_error", magicType)),

0 commit comments

Comments
 (0)