(logger slog.Logger, session ssh.Session, env []string, magicType MagicSessionType, container, containerUser string)
| 610 | } |
| 611 | |
| 612 | func (s *Server) sessionStart(logger slog.Logger, session ssh.Session, env []string, magicType MagicSessionType, container, containerUser string) (retErr error) { |
| 613 | ctx := session.Context() |
| 614 | |
| 615 | magicTypeLabel := magicTypeMetricLabel(magicType) |
| 616 | sshPty, windowSize, isPty := session.Pty() |
| 617 | ptyLabel := "no" |
| 618 | if isPty { |
| 619 | ptyLabel = "yes" |
| 620 | } |
| 621 | |
| 622 | var ei usershell.EnvInfoer |
| 623 | var err error |
| 624 | if s.config.ExperimentalContainers && container != "" { |
| 625 | ei, err = agentcontainers.EnvInfo(ctx, s.Execer, container, containerUser) |
| 626 | if err != nil { |
| 627 | s.metrics.sessionErrors.WithLabelValues(magicTypeLabel, ptyLabel, "container_env_info").Add(1) |
| 628 | return err |
| 629 | } |
| 630 | } |
| 631 | cmd, err := s.CreateCommand(ctx, session.RawCommand(), env, ei) |
| 632 | if err != nil { |
| 633 | s.metrics.sessionErrors.WithLabelValues(magicTypeLabel, ptyLabel, "create_command").Add(1) |
| 634 | return err |
| 635 | } |
| 636 | |
| 637 | if ssh.AgentRequested(session) { |
| 638 | l, err := ssh.NewAgentListener() |
| 639 | if err != nil { |
| 640 | s.metrics.sessionErrors.WithLabelValues(magicTypeLabel, ptyLabel, "listener").Add(1) |
| 641 | return xerrors.Errorf("new agent listener: %w", err) |
| 642 | } |
| 643 | defer l.Close() |
| 644 | go ssh.ForwardAgentConnections(l, session) |
| 645 | cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", "SSH_AUTH_SOCK", l.Addr().String())) |
| 646 | } |
| 647 | |
| 648 | if isPty { |
| 649 | return s.startPTYSession(logger, session, magicTypeLabel, cmd, sshPty, windowSize) |
| 650 | } |
| 651 | return s.startNonPTYSession(logger, session, magicTypeLabel, cmd.AsExec()) |
| 652 | } |
| 653 | |
| 654 | func (s *Server) startNonPTYSession(logger slog.Logger, session ssh.Session, magicTypeLabel string, cmd *exec.Cmd) error { |
| 655 | s.metrics.sessionsTotal.WithLabelValues(magicTypeLabel, "no").Add(1) |
no test coverage detected