ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Remote Docker über SSH verbinden

Wir empfehlen die Verwendung der Visual Studio Code-Erweiterung Remote - SSH, um eine Verbindung zu einem Remote-Computer herzustellen, auf dem die Docker-Engine ausgeführt wird. Sie können die Erweiterungen Remote - SSH und Dev Containers zusammen verwenden. Die Schritte finden Sie in der Dev Containers-Dokumentation.

Es ist auch möglich, direkt über SSH-Tunneling eine Verbindung zur Remote-Docker-Engine herzustellen, worüber Sie unten mehr erfahren können.

SSH-Tunneling einrichten

  1. Verwenden Sie ssh-keygen oder ein ähnliches Tool, um ein öffentliches/privates Schlüsselpaar für die SSH-Authentifizierung zu erhalten und zu konfigurieren. Die Passwortauthentifizierung wird von Docker nicht unterstützt und ist bei einer Konfiguration basierend auf DOCKER_HOST nicht möglich. Wenn ein Schlüsselpaar bereits eingerichtet wurde, kann es verwendet werden.

  2. Konfigurieren Sie ssh-agent auf dem lokalen System mit der oben erzeugten privaten Schlüsseldatei.

    • Windows (OpenSSH): Die neueste(n) Version(en) von Windows 10 enthalten OpenSSH standardmäßig. Es gibt einen Windows-Dienst, ssh-agent, der standardmäßig deaktiviert ist und wieder aktiviert und auf automatischen Start gesetzt werden muss. Führen Sie in einer administrativen PowerShell-Eingabeaufforderung Set-Service ssh-agent -StartupType "Automatic" und Start-Service ssh-agent aus. Führen Sie dann ssh-add <Schlüsseldatei> aus.

    • Windows (Pageant): Sie können Pageant anstelle von OpenSSH verwenden. In diesem Fall ist es notwendig, die Umgebungsvariable SSH_AUTH_SOCK=pageant zu setzen. Am einfachsten ist es, dies als Benutzer- oder Systemumgebungsvariable zu machen.

    • Linux: ssh-agent ist standardmäßig vorhanden. Führen Sie ssh-add <Schlüsseldatei> aus. Ubuntu wurde getestet; Sie könnten auf anderen Distributionen unterschiedliche Ergebnisse erzielen.

    • macOS: ssh-agent ist standardmäßig vorhanden, aber ssh-add wird über Anmeldungen hinweg nicht beibehalten. Führen Sie ssh-add <Schlüsseldatei> aus. Wir empfehlen, VS Code so zu konfigurieren, dass dieser Befehl beim Starten des Terminals mit dem Wert args für terminal.integrated.profiles.osx ausgeführt wird, oder alternativ ein Startskript zu konfigurieren. Sie können diesen Befehl auch nach jeder Anmeldung manuell ausführen.

  3. Überprüfen Sie mit ssh-add -l, ob Ihre Identität für den Agenten verfügbar ist. Es sollten eine oder mehrere Identitäten aufgelistet werden, die etwa so aussehen: 2048 SHA256:abcdefghijk somethingsomething (RSA). Wenn keine Identität aufgelistet ist, können Sie keine Verbindung herstellen. Außerdem muss die richtige Identität vorhanden sein. Wenn die Docker CLI funktioniert, sollte auch der Container Explorer funktionieren. Das Fenster Container Explorer verwendet die Docker CLI, die wiederum den Befehl ssh verwendet und von einer automatisch erkannten Konfiguration profitiert.

  4. Erstellen Sie einen Docker-Kontext, der auf die Remote-Maschine mit der laufenden Docker-Engine verweist. Verwenden Sie ssh://benutzername@host:port als Docker-Endpunkt (ersetzen Sie "host" durch den Namen Ihrer Remote-Maschine oder die IP-Adresse der Remote-Maschine). Geben Sie den folgenden Befehl in einem Terminalfenster ein

    docker context create my-remote-docker-machine --docker "host=ssh://username@host:port"
    

    Geben Sie immer den Benutzernamen in die Docker-Endpunktadresse ein, auch wenn er mit dem lokalen Benutzernamen identisch ist. Wenn Sie den Port weglassen, wird standardmäßig 22 verwendet.

  5. Verwenden Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), um den Befehl Docker-Kontexte: Verwenden auszuführen und den Docker-Kontext zu aktivieren, der auf die Remote-Maschine verweist. Dieser Befehl bewirkt, dass sowohl VS Code als auch die Docker CLI den Kontext der Remote-Maschine verwenden.

    Wenn Sie diesen Befehl nicht haben, stellen Sie sicher, dass Sie die Container Tools-Erweiterung installiert haben.

  6. Es wird empfohlen, die Aktualisierungsrate auf etwas Längeres als den Standardwert mit der Einstellung containers.explorerRefreshInterval zu ändern. Die Verbindung über SSH ist langsam und kann dazu führen, dass erneut versucht wird, zu aktualisieren, bevor die vorherige Aktualisierung abgeschlossen ist. Wir empfehlen mindestens 3000 ms.

Tipps

  • Der "host"-Teil in der Docker-Endpunktzeichenfolge (ssh://benutzername@host:port) muss entweder ein global auflösbarer DNS-Maschinenname oder eine IP-Adresse sein. Die Container Tools-Erweiterung kann keine Host-Aliase verwenden, die in der SSH-Konfigurationsdatei definiert sind.

  • Stellen Sie sicher, dass der Hostschlüssel der Remote-Maschine bereits in der known_hosts-Datei gespeichert ist. Der einfachste Weg, dies sicherzustellen, ist die Verbindung zur Maschine über das ssh-Clientprogramm (führen Sie ssh benutzername@host:port von der Kommandozeile aus). Bei der ersten Verbindung zeigt das ssh-Programm den Hostschlüssel an und lässt Sie ihn bestätigen, wodurch die known_hosts-Datei automatisch aktualisiert wird.

  • Es gibt ein Problem mit dem ssh-keygen-Dienstprogramm, das mit Windows 10 Build 1909 und älter geliefert wird, das verhindert, dass es ordnungsgemäß mit neueren SSH-Daemons funktioniert (z. B. dem, der mit Ubuntu 20.04 LTS und neuer geliefert wird). Die Problemumgehung besteht darin, für die SSH-Verbindung einen ECDSA-Typ-Schlüssel und keinen RSA-Typ-Schlüssel zu verwenden. Sie können einen ECDSA-SSH-Schlüssel generieren und ihn mit den folgenden Befehlen zum SSH-Agenten hinzufügen

    ssh-keygen -t ecdsa -b 521
    ssh-add id_ecdsa
    
  • Windows 10 Build 1909 und älter sind von einem Problem betroffen, das verhindert, dass SSH nach einem Windows OS-Update auf Ihre Identitäten zugreifen kann. Die Problemumgehung besteht darin, einen Dummy-Dienst-Eintrag zur Systemkonfiguration hinzuzufügen. Führen Sie Folgendes in einem administrativen PowerShell-Fenster aus

    New-Service sshd -BinaryPathName "C:\Windows\System32\OpenSSH\ssh.exe"
    
© . This site is unofficial and not affiliated with Microsoft.