Zum Inhalt springen

Lösung: Ubuntu Server

docker-compose.yml
services:
ubuntu:
image: ubuntu:24.04
container_name: ubuntu-lab
hostname: ubuntu-server
restart: unless-stopped
stdin_open: true
tty: true
ports:
- "2222:22"
volumes:
- ubuntu_home:/home
- ./shared:/shared
command: >
bash -c "
apt-get update &&
apt-get install -y openssh-server sudo nano vim curl wget htop net-tools &&
useradd -m -s /bin/bash student &&
echo 'student:student123' | chpasswd &&
usermod -aG sudo student &&
mkdir -p /run/sshd &&
echo 'PermitRootLogin no' >> /etc/ssh/sshd_config &&
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config &&
/usr/sbin/sshd -D
"
volumes:
ubuntu_home:
Terminal-Fenster
$ docker compose up -d
[+] Running 2/2
Network ubuntu-lab_default Created
Container ubuntu-lab Started
Terminal-Fenster
$ docker compose logs -f ubuntu
ubuntu-lab | Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
ubuntu-lab | ...
ubuntu-lab | Setting up openssh-server (1:9.6p1-3ubuntu13) ...
ubuntu-lab | ...
ubuntu-lab | Server listening on 0.0.0.0 port 22.
ubuntu-lab | Server listening on :: port 22.
Terminal-Fenster
$ ssh student@localhost -p 2222
The authenticity of host '[localhost]:2222' can't be established.
ED25519 key fingerprint is SHA256:xxxxx.
Are you sure you want to continue connecting (yes/no)? yes
student@ubuntu-server:~$ whoami
student
student@ubuntu-server:~$ uname -a
Linux ubuntu-server 6.x.x-linuxkit #1 SMP ... x86_64 GNU/Linux
  • Port 22 ist auf vielen Systemen bereits belegt (lokaler SSH-Server)
  • Ports unter 1024 benötigen auf Linux Root-Rechte
  • Best Practice: Nicht-Standard-Ports für Container verwenden
  • Mehrere SSH-Server können parallel laufen (verschiedene Ports)
Aspektdocker execSSH
NetzwerkDirekt über DockerÜber TCP/IP
AuthentifizierungDocker-RechteUser/Password oder Key
LoggingNur Docker-LogsSSH-Logs + Auth-Logs
RealitätsnäheDocker-spezifischWie echter Server
GeschwindigkeitSchnellerEtwas langsamer

Wann was?

  • docker exec: Schnelles Debugging, Administration
  • SSH: Realistische Übung, Remote-Zugriff simulieren
  • Sicherheit: Root-Account ist bekannt → Brute-Force-Ziel
  • Best Practice: Normaler User + sudo statt direkter Root-Login
  • Audit: Nachvollziehbar wer was gemacht hat
  • Prinzip der geringsten Rechte: Nur Root wenn nötig

4. Was passiert mit /home nach docker compose down?

Abschnitt betitelt „4. Was passiert mit /home nach docker compose down?“

Die Daten bleiben erhalten, weil wir ein named Volume verwenden:

volumes:
- ubuntu_home:/home
  • docker compose down → Volume bleibt
  • docker compose down -v → Volume wird gelöscht

Prüfen:

Terminal-Fenster
docker volume ls | grep ubuntu
Terminal-Fenster
# Key generieren (falls nicht vorhanden)
ssh-keygen -t ed25519 -f ~/.ssh/docker_ubuntu
# Public Key anzeigen
cat ~/.ssh/docker_ubuntu.pub
Terminal-Fenster
# Als student einloggen
ssh student@localhost -p 2222
# SSH-Verzeichnis erstellen
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Public Key hinzufügen (den Output von oben einfügen)
echo "ssh-ed25519 AAAA... your@email" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Terminal-Fenster
ssh -i ~/.ssh/docker_ubuntu student@localhost -p 2222

Statt jedes Mal Pakete zu installieren:

Dockerfile
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
openssh-server sudo nano vim curl wget htop net-tools \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -m -s /bin/bash student \
&& echo 'student:student123' | chpasswd \
&& usermod -aG sudo student
RUN mkdir -p /run/sshd \
&& echo 'PermitRootLogin no' >> /etc/ssh/sshd_config \
&& echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
docker-compose.yml
services:
ubuntu:
build: .
container_name: ubuntu-lab
hostname: ubuntu-server
restart: unless-stopped
ports:
- "2222:22"
volumes:
- ubuntu_home:/home
- ./shared:/shared
volumes:
ubuntu_home:

Vorteil: Schnellerer Start, da Pakete bereits im Image sind.