Dockeriser votre application SSH!

Voici comment partager une application SSH simplement!
Mercredi 2 septembre 2020

Il y a quelque temps j’ai créé une interface console avec Perl, et je voulais pouvoir la partager simplement. Une idée me vint à l’esprit: peut-on faire “louer” une application en passant par le protocole SSH ? La réponse est OUI ! Avec docker !

Le Dockerfile & docker-compose

Dockerfile;

Dockerfile
# Fix a tag
FROM ubuntu:latest
# MAINTAINER ...
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd # Changez votre mot de passe ici
RUN sed -ri 's/^#?PermitRootLogin\s+.\*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN mkdir /root/.ssh
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/_ /tmp/_ /var/tmp/\*
EXPOSE 22
# Installez votre application ici...
# ENV DEBIAN_FRONTEND=noninteractive
# RUN apt install -y [packages..]
# COPY mon_application /mon_application
CMD ["/usr/sbin/sshd", "-D"]

docker-compose.yml;

docker-compose.yaml
version: "3.3"
services:
mon_application:
container_name: mon_application
image: mon_application
read_only: true
hostname: mon_application
build:
context: .
dockerfile: Dockerfile
ports:
- "2208:22"
restart: always

Note: pour une question de sécurité, j’ai passé ici la clé read_only à true pour éviter que l’utilisateur ne modifie le container. Attention, ceci n’est pas une fin de sécurité en soit, et ne donnez pas accès à n’importe quoi à l’utilisateur !

Note 2: j’ai également modifié le port d’entrée : étant donné que le port 22 est le port SSH utilisé par défaut, nous ne pouvons pas le choisir. C’est pourquoi ici j’ai choisi le port 2208, mais un autre port peut faire l’affaire !

Sécurité

Si le compte SSH peut-être accessible depuis internet, alors il est vivement recommandé de changer de mot de passe:

Terminal window
docker exec -ti container_ssh passwd

Une autre solution serait d’utiliser uniquement les clés SSH.

Terminal window
docker exec container_ssh passwd -d root
docker cp fichier_avec_les_cles_publiques container_ssh:/root/.ssh/authorized_keys
docker exec container_ssh chown root:root /root/.ssh/authorized_keys

Vous pouvez exécuter ces commandes via docker exec comme montré, ou alors vous pouvez modifier le fichier Dockerfile si ces modifications sont permanentes.

Mode interaction avec Debian / Ubuntu

Il peut arriver que votre application pose des questions supplémentaires lorsque vous faites un apt install -y [package]; pour les éviter, entrez avant la ligne suivante dans le Dockerfile:

ENV DEBIAN_FRONTEND=noninteractive

Grâce à cette ligne, Debian ne vous demandera plus rien.

Sources


Articles recommandés