Dockerfile 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # ─────────────────────────────────────────────
  2. # Stage 1 : compilation de sshproxy v2.1.0
  3. # ─────────────────────────────────────────────
  4. FROM golang:1.24-bookworm AS builder
  5. ARG SSHPROXY_VERSION=2.1.0
  6. RUN apt-get update && apt-get install -y --no-install-recommends \
  7. git ca-certificates make && rm -rf /var/lib/apt/lists/*
  8. WORKDIR /build
  9. RUN git clone --depth 1 --branch v${SSHPROXY_VERSION} \
  10. https://github.com/cea-hpc/sshproxy.git .
  11. # Compile uniquement les 4 binaires Go — on saute les man pages (pas besoin en conteneur)
  12. RUN go build -mod=vendor -ldflags "-X main.SshproxyVersion=${SSHPROXY_VERSION}" \
  13. -o bin/sshproxy github.com/cea-hpc/sshproxy/cmd/sshproxy && \
  14. go build -mod=vendor -ldflags "-X main.SshproxyVersion=${SSHPROXY_VERSION}" \
  15. -o bin/sshproxy-dumpd github.com/cea-hpc/sshproxy/cmd/sshproxy-dumpd && \
  16. go build -mod=vendor -ldflags "-X main.SshproxyVersion=${SSHPROXY_VERSION}" \
  17. -o bin/sshproxy-replay github.com/cea-hpc/sshproxy/cmd/sshproxy-replay && \
  18. go build -mod=vendor -ldflags "-X main.SshproxyVersion=${SSHPROXY_VERSION}" \
  19. -o bin/sshproxyctl github.com/cea-hpc/sshproxy/cmd/sshproxyctl
  20. # ─────────────────────────────────────────────
  21. # Stage 2 : image finale gateway
  22. # ─────────────────────────────────────────────
  23. FROM debian:bookworm-slim
  24. RUN apt-get update && apt-get install -y --no-install-recommends \
  25. openssh-server \
  26. ca-certificates && \
  27. rm -rf /var/lib/apt/lists/*
  28. # Binaires sshproxy — make build les pose dans ./bin/
  29. COPY --from=builder /build/bin/sshproxy /usr/sbin/sshproxy
  30. COPY --from=builder /build/bin/sshproxy-dumpd /usr/sbin/sshproxy-dumpd
  31. COPY --from=builder /build/bin/sshproxyctl /usr/bin/sshproxyctl
  32. COPY --from=builder /build/bin/sshproxy-replay /usr/bin/sshproxy-replay
  33. RUN chmod 755 /usr/sbin/sshproxy /usr/sbin/sshproxy-dumpd \
  34. /usr/bin/sshproxyctl /usr/bin/sshproxy-replay
  35. # Compte testuser — le mot de passe est requis pour déverrouiller le compte
  36. # même en auth par clé (PAM bloque les comptes sans mot de passe)
  37. RUN useradd -m -s /bin/bash testuser && \
  38. echo "testuser:testuser" | chpasswd && \
  39. mkdir -p /home/testuser/.ssh && \
  40. chmod 700 /home/testuser/.ssh
  41. # Clé privée gateway (pour rebond vers dest1/dest2)
  42. # Générée par le script init-keys.sh avant le build
  43. # DOIT être lisible par testuser qui lance sshproxy via ForceCommand sshd
  44. RUN mkdir -p /etc/sshproxy && chmod 755 /etc/sshproxy
  45. COPY keys/gateway_rsa /etc/sshproxy/gateway_rsa
  46. RUN chmod 600 /etc/sshproxy/gateway_rsa && chown testuser:testuser /etc/sshproxy/gateway_rsa
  47. # Clé publique Windows → authorized_keys de la gateway
  48. COPY keys/lab_rsa.pub /home/testuser/.ssh/authorized_keys
  49. RUN chmod 600 /home/testuser/.ssh/authorized_keys && \
  50. chown -R testuser:testuser /home/testuser/.ssh
  51. # sshd_config gateway
  52. RUN mkdir -p /run/sshd
  53. COPY gateway/sshd_config /etc/ssh/sshd_config
  54. # sshproxy config
  55. COPY gateway/sshproxy.yaml /etc/sshproxy/sshproxy.yaml
  56. # Wrapper sshproxy — détecte shell interactif vs commandes
  57. COPY gateway/sshproxy-wrapper.sh /usr/sbin/sshproxy-wrapper
  58. RUN chmod 755 /usr/sbin/sshproxy-wrapper
  59. EXPOSE 22
  60. CMD ["/usr/sbin/sshd", "-D", "-e"]