Minimaler SSH-Server im Docker-Container mit dropbear
Dieses Beispiel-Dockerfile führt einen dropbear-SSH-Daemon auf Alpine Linux aus. Es erstellt einen Systembenutzer namens myuser und erlaubt nur die Anmeldung für diesen bestimmten Benutzer.
FROM alpine:3.17
WORKDIR /app
ENV SSHUSER=myuser
# Der zu erstellende SSH-Benutzer
RUN apk --no-cache add dropbear &&\
mkdir -p /home/$SSHUSER/.ssh &&\
adduser -s /bin/sh -D $SSHUSER --home /home/$SSHUSER &&\
chown -R $SSHUSER:$SSHUSER /home/$SSHUSER
CMD ["/bin/sh", "-c", "/usr/sbin/dropbear -RFEwgsjk -G ${SSHUSER} -p 22"]Ändere den Benutzernamen nach Belieben.
Baue so:
docker build -t sshtest .
docker build -t sshtest .Container starten
Du kannst ihn so ausführen — denke daran, /etc/dropbear auf ein Volume oder lokales Verzeichnis zu mounten, sowohl um Host-Key-Dateien zu persistieren als auch um autorisierte Schlüsseldateien zu speichern:
docker run -v $(pwd)/dropbear:/etc/dropbear -v $(pwd)/dotssh:/home/myuser/.ssh -it sshtestDropbear-Optionen
Die Dropbear-Optionen -RFEwgsjk sind:
-R: Host-Keys nach Bedarf erstellen-F: Nicht in den Hintergrund forken-E: Auf stderr statt syslog protokollieren-w: Root-Logins verbieten-g: Passwort-Logins für Root deaktivieren-s: Passwort-Logins deaktivieren-j: Lokales Port-Forwarding deaktivieren-k: Remote-Port-Forwarding deaktivieren
Public-Key-Authentifizierung einrichten
Generiere zuerst ein Schlüsselpaar mit
ssh-keygen -t ed25519 -f id_dropbear -N ""
ssh-keygen -t ed25519 -f id_dropbear -N ""Wir nehmen an, dass du das .ssh-Verzeichnis des Benutzers in ./dotssh gemountet hast (wie in unserem Beispiel, siehe Container starten oben). Du kannst dann den von ssh-keygen generierten Public Key — der in id_dropbear.pub gespeichert wird — in die authorized_keys-Datei im Dropbear-SSH-Verzeichnis kopieren:
cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keys
cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keysDas sudo (in sudo tee) ist nur erforderlich, weil das dotssh-Verzeichnis einem anderen Benutzer gehört.
Mit dem Container verbinden
Zuerst musst du die IP-Adresse des Containers finden, mithilfe der Methode aus How to list just container names & IP address(es) of all Docker conatiners. In unserem Beispiel ist diese IP-Adresse 10.254.1.4. Du kannst dich dann mit dem Container über den Public Key verbinden:
ssh -i id_dropbear [email protected]
ssh -i id_dropbear [email protected]