Dieser Artikel stellt vor, wie man über SSH zu einem Docker-Container mit Bash in der Linux-Befehlszeile verbindet.
Dockerfile
Erstellen Sie zunächst ein Dockerfile, um die SSH-Verbindung innerhalb des Docker-Containers einzurichten. Hier ist der Inhalt:
# Dockerfile
FROM ubuntu:18.04
# SSH-Server installieren und konfigurieren
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:pw' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
# SSH-Port freigeben
EXPOSE 22
# SSH-Server starten
CMD ["/usr/sbin/sshd", "-D"]
Dieses Dockerfile verwendet ein Ubuntu 18.04-basiertes Docker-Image, installiert und konfiguriert einen SSH-Server. Es gibt den SSH-Port 22 frei, setzt das Root-Benutzer-Passwort auf pw und konfiguriert, um SSH-Verbindungen zu erlauben.
Als Nächstes verwenden Sie dieses Dockerfile, um ein Docker-Image zu erstellen und einen Container zu starten:
docker image build . -t ssh_server:1.1
docker run -d -p 56022:22 ssh_server:1.1
ssh [email protected] -p 56022 # Passwort ist pw (wenn eine andere IP verwendet wird, überprüfen Sie die lokale IP mit dem Befehl `ip addr`)
Umgebung direkt erstellen (ubuntu)
Beim direkten Einrichten der SSH-Verbindung innerhalb eines Docker-Containers befolgen Sie diese Schritte:
: <<'NOTE'
Normalerweise können Sie auf regulärem Ubuntu (wenn von VirtualBox usw. installiert) SSH-Verbindungen herstellen, indem Sie einfach `openssh-server` installieren. Docker-Images haben jedoch idealerweise eine minimale Konfiguration, und es könnte Unterschiede zu regulären Ubuntu-Desktop-Versionen geben. Es ist für allgemeine Verwendung in Ordnung, aber es lohnt sich zu überprüfen.
Daher können Sie, wenn Sie versuchen, SSH-Verbindungen nur mit `apt install openssh-server` herzustellen, einen Fehler wie diesen erhalten:
root@conoha:~# ssh [email protected] -p 57022
ssh_exchange_identification: Connection closed by remote host
NOTE
# Container betreten, notwendige Pakete installieren und SSH-Server starten
docker run -p 57022:22 -it -v /media/ownCloud/pg/docker/mnt/:/docker yuis/env:1.2
apt-get update && apt-get install -y openssh-server
echo 'root:pw' | chpasswd
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
service ssh restart # oder `/usr/sbin/sshd -D` usw.
# Container beenden
ssh [email protected] -p 57022 # IP-Adresse ist wahrscheinlich bei 127.0.0.1 festgelegt, aber Sie können den Befehl `ip addr` ausführen, um zu bestätigen
SSH-Verbindung von Remote
Bei Verwendung der SSH-Verbindung durch Tunneling gibt es die folgende Methode:
ssh -t [email protected] ssh -p 55022 [email protected]
Sie können auch Port-Forwarding tunneln:
ssh -t -R 52698:localhost:52698 -L 4567:localhost:4567 [email protected] ssh -p 55022 -L 4567:localhost:4567 -R 52698:localhost:52698 [email protected]
# Beispiel:
ASUS:/mnt/c/pg$ ssh -t -R 52698:localhost:52698 -L 4567:localhost:4567 [email protected] ssh -p 55022 -L 4567:localhost:4567 -R 52698:localhost:52698 [email protected]
root@541e5aed5dcf:~# ruby - <<EOS -o 0.0.0.0
require 'sinatra'
get '/' do
'Hello docker!'
end
EOS
ASUS:/mnt/c/pg$ curl localhost:4567
Hello docker!
Das waren grundlegende Schritte und Erklärungen für SSH-Verbindung zu Docker-Containern und Tunneling. Wenn Ihnen das Verständnis von Docker fehlt, möchten Sie vielleicht auch VirtualBox in Betracht ziehen.