Skip to main content

Command Palette

Search for a command to run...

Configuramos SSH en Dockerfile para acceder a pods en EKS

Updated
4 min read
Configuramos SSH en Dockerfile para acceder a pods en EKS
M

Apasionado por la tecnología con más de 10 años de experiencia. Actualmente trabajando con tecnologías Cloud y Devops.

☁️ AWS Certified Solutions Architect – Associate ☁️ AWS Certified Security – Specialty

Cuando trabajas en aplicaciones PHP dentro de un contenedor Docker, puede haber situaciones en las que necesites acceso SSH directo al contenedor. Esto te permite inspeccionar archivos, ejecutar comandos, o realizar configuraciones rápidas que pueden ser más fáciles de manejar desde la línea de comandos. A continuación, te mostraré cómo instalar SSH en un contenedor Docker para una aplicación PHP y te explicaré algunos casos en los que esto puede ser útil.

Casos Comunes donde se Necesita SSH en un Contenedor Docker

  1. Depuración en Producción: A veces, cuando un entorno de producción no funciona como se espera, el acceso SSH puede ser una herramienta poderosa para depurar en tiempo real.

  2. Ejecución de Comandos Manuales: Si necesitas ejecutar scripts manualmente o comandos de mantenimiento dentro del contenedor.

  3. Acceso a Archivos de Configuración: Si necesitas modificar archivos de configuración directamente en el contenedor para ajustar comportamientos de la aplicación o del servidor.

  4. Automatización Limitada: En escenarios donde la automatización no cubre todos los casos, el acceso SSH permite realizar ajustes manuales temporales.

Dockerfile para Instalar SSH en una Aplicación PHP

A continuación, te dejo un ejemplo de cómo configurar SSH en tu contenedor Docker para una aplicación PHP. Este Dockerfile instala el servidor SSH y configura un acceso de usuario root con contraseña.

# Usar una imagen base de Ubuntu 20.04
FROM ubuntu:20.04

# Instalar actualizaciones y dependencias
RUN apt-get update && apt-get install -y \
    apache2 \
    php \
    libapache2-mod-php \
    openssh-server

# Crear el directorio para el proceso de SSH
RUN mkdir /var/run/sshd

# Configurar la contraseña del usuario root (cambia 'your_password' por tu contraseña deseada)
RUN echo 'root:your_password' | chpasswd

# Permitir acceso root a través de SSH
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# Ajustar la configuración de PAM para SSH
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

# Habilitar módulos de Apache y limpiar la instalación
RUN a2enmod rewrite && apt-get clean

# Exponer el puerto 22 para SSH y el puerto 80 para Apache
EXPOSE 22 80

# Iniciar el servicio SSH y Apache
CMD service apache2 start && /usr/sbin/sshd -D

Explicación del Dockerfile:

  • Instalación de SSH: La línea apt-get install -y openssh-server instala el servidor SSH en el contenedor.

  • Directorio SSH: El comando mkdir /var/run/sshd crea el directorio necesario para que el servicio SSH funcione.

  • Contraseña del root: El comando echo 'root:your_password' | chpasswd establece una contraseña para el usuario root. Asegúrate de cambiar your_password por una contraseña segura.

  • Permitir Acceso Root por SSH: Modificamos el archivo de configuración de SSH para permitir el acceso al usuario root con contraseña.

  • Ajustes de PAM: Este ajuste permite que el servicio SSH funcione correctamente en entornos Docker.

  • Exposición del Puerto 22: SSH utiliza el puerto 22, así que lo exponemos en el contenedor.

Deployment de Kubernetes para la Aplicación PHP con SSH

Ahora, veamos cómo configurar un Deployment en Kubernetes que incluya la ejecución de SSH junto con Apache:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-ssh-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php-ssh
  template:
    metadata:
      labels:
        app: php-ssh
    spec:
      containers:
      - name: php-ssh-container
        image: tu-imagen:latest
        ports:
        - containerPort: 80  # Puerto para Apache
        - containerPort: 22  # Puerto para SSH
        command: ["/bin/sh", "-c"]
        args:
          - service apache2 start && /usr/sbin/sshd -D;
        resources:
          limits:
            cpu: "500m"
            memory: "512Mi"
          requests:
            cpu: "200m"
            memory: "256Mi"

Explicación del Deployment:

  • Especificación del Contenedor: Usamos una imagen Docker que incluye Apache y SSH configurado.

  • Comando y Argumentos: Iniciamos tanto el servidor Apache como el servidor SSH cuando el contenedor se ejecuta.

  • Puertos: Exponemos tanto el puerto 80 (para Apache) como el puerto 22 (para SSH) en el contenedor.

Configurar SSH en un contenedor Docker para una aplicación PHP puede ser muy útil en varios escenarios de depuración y mantenimiento. Este artículo te proporciona una guía paso a paso para instalar y configurar SSH en tu contenedor y luego desplegarlo en un clúster Kubernetes. Sin embargo, es importante recordar que el acceso SSH a contenedores en producción debe ser utilizado con precaución y siempre asegurando el entorno con contraseñas seguras y controles de acceso adecuados.

Este método puede ser particularmente útil para tareas de administración rápida o depuración que requieren acceso directo al contenedor. Sin embargo, siempre es recomendable automatizar y mantener buenas prácticas de seguridad en tus entornos de contenedores y Kubernetes.

More from this blog

B

Blog de CloudAcademy

80 posts