Ich habe eine App, die verschiedene lustige Dinge mit Git ausführt (wie das Ausführen von git clone & git push) und ich versuche, sie zu docken.
Ich stoße jedoch auf ein Problem, bei dem ich dem Container einen SSH-Schlüssel hinzufügen muss, damit der Container-Benutzer ihn verwenden kann.
Ich habe versucht, es zu kopieren /root/.ssh/
, zu ändern $HOME
, einen Git-SSH-Wrapper zu erstellen, und immer noch kein Glück.
Hier ist die Docker-Datei als Referenz:
#DOCKER-VERSION 0.3.4
from ubuntu:12.04
RUN apt-get update
RUN apt-get install python-software-properties python g++ make git-core openssh-server -y
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install nodejs -y
ADD . /src
ADD ../../home/ubuntu/.ssh/id_rsa /root/.ssh/id_rsa
RUN cd /src; npm install
EXPOSE 808:808
CMD [ "node", "/src/app.js"]
app.js
führt die git-Befehle wie aus git pull
Antworten:
Es ist ein schwierigeres Problem, wenn Sie SSH zur Erstellungszeit verwenden müssen. Zum Beispiel, wenn Sie verwenden
git clone
oder in meinem Fallpip
undnpm
aus einem privaten Repository herunterladen.Die Lösung, die ich gefunden habe, besteht darin, Ihre Schlüssel mithilfe des
--build-arg
Flags hinzuzufügen . Anschließend können Sie den neuen experimentellen--squash
Befehl (hinzugefügt 1.13) verwenden, um die Ebenen zusammenzuführen, sodass die Schlüssel nach dem Entfernen nicht mehr verfügbar sind. Hier ist meine Lösung:Befehl erstellen
Dockerfile
Update: Wenn Sie Docker 1.13 verwenden und experimentelle Funktionen verwenden, können Sie
--squash
an den Build-Befehl anhängen, mit dem die Ebenen zusammengeführt, die SSH-Schlüssel entfernt und ausgeblendet werdendocker history
.quelle
id_rsa.pub
Datei entfernen, da dies nicht erforderlich ist.$(openssl rsa -in ~/.ssh/id_rsa)
stattdessenEs stellt sich heraus, dass bei Verwendung von Ubuntu die ssh_config nicht korrekt ist. Sie müssen hinzufügen
zu Ihrer Docker-Datei, damit diese Ihren SSH-Schlüssel erkennt.
quelle
RUN echo " Host example.com" >> /root/.ssh/config RUN echo " User <someusername>" >> /root/.ssh/config
Der SSH-Schlüssel bleibt im Bild gespeichert, auch wenn Sie den Schlüssel nach dem Hinzufügen in einem Ebenenbefehl entfernen (siehe Kommentare in diesem Beitrag ).
In meinem Fall ist das in Ordnung, also benutze ich Folgendes:
quelle
Wenn Sie Docker Compose verwenden , können Sie den SSH-Agenten einfach so weiterleiten:
quelle
SSH_AUTH_SOCK
ist eine Variable, die einen Pfad zu einem SSH-Agenten enthältSSH_AUTH_SOCK
blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add$SSH_AUTH_SOCK
zu mounten, müssen Sie diesen Pfad mounten -/run/host-services/ssh-auth.sock
.Erweiterung der Antwort von Peter Grainger Ich konnte den seit Docker 17.05 verfügbaren mehrstufigen Build verwenden . Offizielle Seite besagt:
Wenn ich dies hier berücksichtige, ist dies mein Beispiel für die Aufnahme von
Dockerfile
drei Erstellungsphasen. Es soll ein Produktionsabbild der Client-Webanwendung erstellen..dockerignore
wiederholt den Inhalt der.gitignore
Datei (verhindert, dass dienode_modules
resultierendendist
Verzeichnisse des Projekts kopiert werden):Befehlsbeispiel zum Erstellen eines Images:
Wenn Ihr privater SSH-Schlüssel keine Passphrase hat, geben Sie einfach ein leeres
SSH_KEY_PASSPHRASE
Argument an.So funktioniert es:
1). Nur in der ersten Phase
package.json
werdenyarn.lock
Dateien und der private SSH-Schlüssel in das erste benannte Zwischenbild kopiertsources
. Um weitere Eingabeaufforderungen für SSH-Schlüssel zu vermeiden, wird diese automatisch hinzugefügtssh-agent
. Schließlichyarn
installiert der Befehl alle erforderlichen Abhängigkeiten von NPM und klont private Git-Repositorys von Bitbucket über SSH.2). In der zweiten Phase wird der Quellcode der Webanwendung erstellt, minimiert und im
dist
Verzeichnis des nächsten benannten Zwischenabbilds abgelegtproduction
. Beachten Sie, dass der Quellcode der installiertennode_modules
Datei aus demsources
in der ersten Phase erstellten Image mit der folgenden Zeile kopiert wird:Wahrscheinlich könnte es auch die folgende Zeile sein:
Wir haben hier nur noch das
node_modules
Verzeichnis vom ersten Zwischenbild, neinSSH_KEY
undSSH_KEY_PASSPHRASE
Argumente mehr. Der gesamte Rest, der für die Erstellung benötigt wird, wird aus unserem Projektverzeichnis kopiert.3). In der dritten Stufe reduzieren wir die Größe des endgültigen Images, das als gekennzeichnet wird,
ezze/geoport:0.6.0
indem wir nur dasdist
Verzeichnis des zweiten Zwischenabbilds mit dem Namen einschließenproduction
und Node Express zum Starten eines Webservers installieren.Das Auflisten von Bildern ergibt eine Ausgabe wie folgt:
Dabei entsprechen nicht markierte Bilder der ersten und der zweiten Zwischenstufe.
Wenn du läufst
Sie werden keine Erwähnungen von
SSH_KEY
undSSH_KEY_PASSPHRASE
im endgültigen Bild sehen.quelle
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
aber wenn ich einen anderen RUN oder sogar denselben RUN einchecke Befehl durch Ausführen eines Befehlsssh-add -l
sagt mir, dass "Der Agent hat keine Identität". Fangen Sie an, mir die Haare abzuziehen, irgendwelche Gedanken?Um Ihren SSH-Schlüssel in einen Container zu injizieren, haben Sie mehrere Lösungen:
Wenn Sie eine Docker-Datei mit der
ADD
Anweisung verwenden, können Sie diese während des Erstellungsprozesses einfügenEinfach so etwas machen
cat id_rsa | docker run -i <image> sh -c 'cat > /root/.ssh/id_rsa'
Verwenden des
docker cp
Befehls, mit dem Sie Dateien einfügen können, während ein Container ausgeführt wird.quelle
apt-get install openssh-server
Basis' -Image versucht , meinen Schlüssel in /root/.ssh/id_rsa eingegeben und es hat gut funktioniert. Welches Bild verwenden Sie?Eine plattformübergreifende Lösung besteht darin, einen Bind-Mount zu verwenden, um den
.ssh
Ordner des Hosts für den Container freizugeben:Ähnlich wie bei der Agentenweiterleitung werden durch diesen Ansatz die öffentlichen Schlüssel für den Container zugänglich. Ein weiterer Vorteil ist, dass es auch mit einem Nicht-Root-Benutzer funktioniert und Sie mit GitHub verbunden werden. Eine Einschränkung ist jedoch, dass alle Inhalte (einschließlich privater Schlüssel) aus dem
.ssh
Ordner gemeinsam genutzt werden, sodass dieser Ansatz nur für die Entwicklung und nur für vertrauenswürdige Container-Images wünschenswert ist.quelle
docker build
nur währenddocker run
docker-compose up
in meinem lokalen Windows 10. Wie soll ich Ihre Lösung in diesem Szenario verwenden?Docker-Container sollten als eigene "Dienste" angesehen werden. Um Bedenken zu trennen, sollten Sie Funktionen trennen:
1) Daten sollten sich in einem Datencontainer befinden: Verwenden Sie ein verknüpftes Volume, um das Repo zu klonen. Dieser Datencontainer kann dann mit dem Dienst verknüpft werden, der ihn benötigt.
2) Verwenden Sie einen Container, um die Git-Klonaufgabe auszuführen (dh der einzige Job ist das Klonen), indem Sie den Datencontainer beim Ausführen mit ihm verknüpfen.
3) Gleiches gilt für den SSH-Schlüssel: Legen Sie fest, dass es sich um ein Volume handelt (wie oben vorgeschlagen), und verknüpfen Sie es bei Bedarf mit dem Git-Klon-Dienst
Auf diese Weise sind sowohl die Klonaufgabe als auch der Schlüssel kurzlebig und nur bei Bedarf aktiv.
Wenn Ihre App selbst eine Git-Oberfläche ist, sollten Sie Github- oder Bitbucket-REST-APIs direkt in Betracht ziehen, um Ihre Arbeit zu erledigen: Dafür wurden sie entwickelt.
quelle
Diese Zeile ist ein Problem:
Wenn Sie die Dateien angeben, die Sie in das Bild kopieren möchten, können Sie nur relative Pfade verwenden - relativ zu dem Verzeichnis, in dem sich Ihre Docker-Datei befindet. Sie sollten stattdessen Folgendes verwenden:
Legen Sie die Datei id_rsa in demselben Verzeichnis ab, in dem sich Ihre Docker-Datei befindet.
Weitere Informationen finden Sie hier: http://docs.docker.io/reference/builder/#add
quelle
docker cp
legt es einfach in den Behälter und nicht in das Bild, oder?Wir hatten ein ähnliches Problem bei der Installation von npm in der Docker-Erstellungszeit.
Inspiriert von der Lösung von Daniel van Flymen und der Kombination mit dem Umschreiben von Git- URLs haben wir eine etwas einfachere Methode zur Authentifizierung der npm-Installation von privaten Github-Repos gefunden - wir haben oauth2-Token anstelle der Schlüssel verwendet.
In unserem Fall wurden die npm-Abhängigkeiten als "git + https://github.com/ ..." angegeben.
Für die Authentifizierung im Container müssen die URLs neu geschrieben werden, damit sie entweder für die SSH-Authentifizierung (ssh: //[email protected]/) oder die Token-Authentifizierung (https: // $ {GITHUB_TOKEN} @ github.com /) geeignet sind.
Build-Befehl:
Leider bin ich auf Docker 1.9, daher ist die Option --squash noch nicht vorhanden und muss eventuell hinzugefügt werden
Dockerfile:
quelle
Leiten Sie den SSH-Authentifizierungssocket an den Container weiter:
Ihr Skript kann a ausführen
git clone
.Extra: Wenn geklonte Dateien zu einem bestimmten Benutzer gehören sollen, müssen Sie sie verwenden,
chown
da die Verwendung eines anderen Benutzers als root im Containergit
fehlschlägt.Sie können diese Veröffentlichung in der Containerumgebung einige zusätzliche Variablen durchführen:
Nachdem Sie geklont haben, müssen Sie ausführen
chown $OWNER_USER:$OWNER_GROUP -R <source_folder>
, um den richtigen Besitz festzulegen, bevor Sie den Container verlassen, damit ein Nicht-Root-Benutzer außerhalb des Containers auf die Dateien zugreifen kann.quelle
-u root:$(id -u $USER)
, dass mindestens die Dateien derselben primären Gruppe wie Ihr Benutzer gehören. Dadurch sollten alle Dateien zumindest lesbar sein, ohnesudo
dass sie mit0600
Berechtigungen erstellt werden.-u root:$(id -u $USER)
sollte sein-g
./tmp/ssh_auth.sock: No such file or directory
jetzt/tmp/ssh-vid8Zzi8UILE/agent.46016
auf meinem Host-Computer/tmp
in Ihrem Container verursacht werden. Oder ein Tippfehler im Docker-Befehl run. Stellen Sie sicher, dass die bind-Anweisung korrekt ist-v $SSH_AUTH_SOCK:/tmp/ssh_auth.sock
: Reihenfolge ist wichtig und Semikolon ist ebenfalls wichtig. Weitere Hilfe finden Sie in der Docker-Dokumentation .Wie eczajk bereits in Daniel van Flymens Antwort kommentierte, scheint es nicht sicher zu sein, die Schlüssel zu entfernen und zu verwenden
--squash
, da sie in der Geschichte immer noch sichtbar sind (docker history --no-trunc
).Stattdessen können Sie mit Docker 18.09 jetzt die Funktion "Geheimnisse erstellen" verwenden. In meinem Fall habe ich ein privates Git-Repo mit dem SSH-Schlüssel meines Hosts mit den folgenden Angaben in meiner Docker-Datei geklont:
Um dies verwenden zu können, müssen Sie das neue BuildKit-Backend aktivieren, bevor Sie Folgendes ausführen können
docker build
:Und Sie müssen den
--ssh default
Parameter hinzufügendocker build
.Weitere Informationen hierzu finden Sie hier: https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066
quelle
ssh-add ~/.ssh/id_rsa
Laufen zu bringen: 1) Füge meinen privaten Schlüssel zu ssh-agent hinzu und 2) füge den Git-Host zu bekannten_Hosts hinzu, dh für Bitbucket:RUN ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access and the repository exists.
Dies trotz Übergabe des--ssh default
Flags in meinem Docker-Build und Verwendung--mount=type=ssh
im Befehl run, in dem ichgit clone
. Ich kann das gleiche Repo problemlos auf der Build-Maschine klonen. Im Docker-Build-Container schlägt dies einfach fehl. Ich vermute, dass die Mac-Version von Docker den SSH-Client nicht weitergibt.Dieses Problem ist wirklich ärgerlich. Da Sie keine Datei außerhalb des Dockerfile-Kontexts hinzufügen / kopieren können, ist es unmöglich, ~ / .ssh / id_rsa einfach mit /root/.ssh/id_rsa des Bildes zu verknüpfen, und wenn Sie definitiv einen Schlüssel benötigen, um etwas zu tun wie Git-Klon von einem privaten Repo-Link ..., während der Erstellung Ihres Docker-Images.
Wie auch immer, ich habe eine Lösung gefunden, die nicht so überzeugend war, aber für mich funktioniert hat.
in Ihrer Docker-Datei:
ein Skript für einen Dreh:
Wenn Sie aus diesem Image einen Container mit einigen SSH-Anforderungen ausführen müssen, fügen Sie einfach -v für den Befehl run hinzu, z.
Docker führen Sie den Befehl -v ~ / .ssh / id_rsa: /root/.ssh/id_rsa --name container image aus
Diese Lösung führt dazu, dass sowohl in Ihrer Projektquelle als auch im erstellten Docker-Image kein privater Schlüssel vorhanden ist.
quelle
docker cp
? Es wird verwendet, um "Dateien / Ordner zwischen einem Container und Ihrem Host zu kopieren".docker cp
könnte den Trick machen. In genau dieser Situation brauchte ich jedoch den ssh_key, während das Image erstellt wurde, und es gibt zu diesem Zeitpunkt keinen Container ... wird meinen unklaren Ausdruck trotzdem aktualisieren, danke.Ich bin heute auf das gleiche Problem gestoßen und habe die Version mit früheren Beiträgen etwas modifiziert. Ich fand diesen Ansatz für mich nützlicher
(Beachten Sie, dass das schreibgeschützte Flag, damit der Container meinen SSH-Schlüssel auf keinen Fall durcheinander bringt.)
Im Container kann ich jetzt laufen:
Ich bekomme also nicht den
Bad owner or permissions on /root/.ssh/..
Fehler, der von @kross notiert wurdequelle
ssh-agent bash -c "ssh-add..."
. Ich kann das dann direkt an Docker Run übergeben. Alle vorherigen Beispiele, die ich gefunden habe, wurden verwendeteval ssh-agent
, gefolgt von ssh-add, und ich konnte keinen Weg finden, dieseval
über den Docker-Befehl run auszuführen."Sie können Remoteserver selektiv auf Ihren lokalen SSH-Agenten zugreifen lassen, als ob er auf dem Server ausgeführt würde."
https://developer.github.com/guides/using-ssh-agent-forwarding/
quelle
Sie können auch Ihr .ssh-Verzeichnis zwischen dem Host und dem Container verknüpfen. Ich weiß nicht, ob diese Methode Auswirkungen auf die Sicherheit hat, aber möglicherweise die einfachste Methode. So etwas sollte funktionieren:
Denken Sie daran, dass Docker mit sudo ausgeführt wird (es sei denn, Sie tun dies nicht). In diesem Fall verwenden Sie die Root-SSH-Schlüssel.
quelle
Bad owner or permissions on /root/.ssh/config
.docker run
, aber nicht während verwendet werdendocker build
.Ausgehend von
docker API 1.39+
(API-Versiondocker version
prüfen mit ) Docker-Build ermöglicht das--ssh
Option entweder mit einem Agent-Socket oder mit Schlüsseln verwendet werden, damit die Docker Engine SSH-Agentenverbindungen weiterleiten kann.Build-Befehl
Dockerfile
Mehr Info:
quelle
could not parse ssh: [default=~/.ssh/id_rsa]: stat ~/.ssh/id_rsa: no such file or directory
. Verwenden Sie den vollständigen Pfad, wenn dies nicht funktioniert.Wenn Sie sich nicht um die Sicherheit Ihrer SSH-Schlüssel kümmern, finden Sie hier viele gute Antworten. Wenn Sie dies tun, war die beste Antwort, die ich gefunden habe, ein Link in einem Kommentar oben zu diesem GitHub-Kommentar von diegocsandrim . Damit andere es eher sehen und für den Fall, dass das Repo jemals verschwindet, hier eine bearbeitete Version dieser Antwort:
Die meisten Lösungen lassen den privaten Schlüssel im Bild. Dies ist schlecht, da jeder, der Zugriff auf das Bild hat, Zugriff auf Ihren privaten Schlüssel hat. Da wissen wir nicht genug über das Verhalten von
squash
, kann dies auch dann der Fall sein, wenn Sie den Schlüssel löschen und diese Ebene quetschen.Wir generieren eine Pre-Sign-URL für den Zugriff auf den Schlüssel mit aws s3 cli und beschränken den Zugriff für ca. 5 Minuten. Wir speichern diese Pre-Sign-URL in einer Datei im Repo-Verzeichnis und fügen sie dann in der Docker-Datei dem Bild hinzu.
In Dockerfile haben wir einen RUN-Befehl, der alle folgenden Schritte ausführt: Verwenden Sie die Pre-Sing-URL, um den SSH-Schlüssel abzurufen, führen Sie die npm-Installation aus und entfernen Sie den SSH-Schlüssel.
Wenn Sie dies in einem einzigen Befehl tun, wird der SSH-Schlüssel in keiner Ebene gespeichert, aber die Vorzeichen-URL wird gespeichert. Dies ist kein Problem, da die URL nach 5 Minuten nicht mehr gültig ist.
Das Build-Skript sieht folgendermaßen aus:
Dockerfile sieht folgendermaßen aus:
quelle
In späteren Versionen von Docker (17.05) können Sie mehrstufige Builds verwenden . Dies ist die sicherste Option, da die vorherigen Builds immer nur vom nachfolgenden Build verwendet werden können und dann zerstört werden
Weitere Informationen finden Sie in der Antwort auf meine Frage zum Stapelüberlauf
quelle
Eine kurze Übersicht über die Herausforderungen von SSH in Docker-Containern finden Sie hier . Es gibt verschiedene Möglichkeiten, um innerhalb eines Containers eine Verbindung zu vertrauenswürdigen Fernbedienungen herzustellen, ohne Geheimnisse preiszugeben:
~/.ssh
dem Container auszusetzen . (Nur Entwicklung, möglicherweise unsicher)Darüber hinaus besteht die Möglichkeit, einen Schlüsselspeicher zu verwenden, der in einem separaten Docker-Container ausgeführt wird, auf den zur Laufzeit bei Verwendung von Compose zugegriffen werden kann. Der Nachteil hierbei ist die zusätzliche Komplexität aufgrund der Maschinen, die zum Erstellen und Verwalten eines Schlüsselspeichers wie Vault von HashiCorp erforderlich sind .
Informationen zur Verwendung von SSH-Schlüsseln in einem eigenständigen Docker-Container finden Sie in den oben verlinkten Methoden. Berücksichtigen Sie die jeweiligen Nachteile je nach Ihren spezifischen Anforderungen. Wenn Sie jedoch in Compose ausgeführt werden und zur Laufzeit einen Schlüssel für eine App freigeben möchten (dies spiegelt die praktischen Aspekte des OP wider), versuchen Sie Folgendes:
docker-compose.env
Datei und fügen Sie sie Ihrer.gitignore
Datei hinzu.docker-compose.yml
und fügen Sie sieenv_file
für den Service hinzu, für den der Schlüssel erforderlich ist.process.node.DEPLOYER_RSA_PUBKEY
im Fall einer Node.js-Anwendung.Der oben beschriebene Ansatz ist ideal für die Entwicklung und das Testen. Obwohl er die Produktionsanforderungen erfüllen könnte, ist es in der Produktion besser, eine der anderen oben genannten Methoden zu verwenden.
Zusätzliche Ressourcen:
quelle
Sie können einen mehrstufigen Build verwenden, um Container zu erstellen Dies ist der folgende Ansatz: -
Stufe 1 Erstellen eines Bildes mit ssh
Stufe 2: Bauen Sie Ihren Container
Fügen Sie in Ihrer Erstellungsdatei das env-Attribut hinzu:
Übergeben Sie dann Argumente aus dem Build-Skript wie folgt:
Und entfernen Sie den Zwischenbehälter aus Sicherheitsgründen. Dies wird Ihnen helfen, zu jubeln.
quelle
Ein einfacher und sicherer Weg, dies zu erreichen, ohne Ihren Schlüssel in einer Docker-Bildebene zu speichern oder ssh_agent-Gymnastik zu durchlaufen, ist:
Dockerfile
Erstellen Sie als einen Ihrer Schritte ein.ssh
Verzeichnis, indem Sie Folgendes hinzufügen:RUN mkdir -p /root/.ssh
Darunter geben Sie an, dass Sie das ssh-Verzeichnis als Volume bereitstellen möchten:
VOLUME [ "/root/.ssh" ]
Stellen Sie sicher, dass Ihr Container
ssh_config
weiß, wo sich die öffentlichen Schlüssel befinden, indem Sie diese Zeile hinzufügen:RUN echo " IdentityFile /root/.ssh/id_rsa" >> /etc/ssh/ssh_config
Stellen Sie das
.ssh
Verzeichnis Ihres lokalen Benutzers zur Laufzeit dem Container zur Verfügung:docker run -v ~/.ssh:/root/.ssh -it image_name
Oder
dockerCompose.yml
fügen Sie dies unter der Lautstärketaste des Dienstes hinzu:- "~/.ssh:/root/.ssh"
Dein Finale
Dockerfile
sollte etwas enthalten wie:quelle
Ich versuche, das Problem anders zu lösen: Hinzufügen eines öffentlichen SSH-Schlüssels zu einem Bild. In meinen Versuchen habe ich jedoch festgestellt, dass "Docker-CP" zum Kopieren von einem Container auf einen Host dient. Punkt 3 in der Antwort von Creak scheint zu sagen, dass Sie Docker CP verwenden können, um Dateien in einen Container zu injizieren. Siehe https://docs.docker.com/engine/reference/commandline/cp/
Auszug
quelle
Sie können die autorisierten Schlüssel mithilfe eines freigegebenen Ordners an Ihren Container übergeben und die Berechtigungen mithilfe einer Docker-Datei wie folgt festlegen:
Und Ihr Docker-Lauf enthält etwa Folgendes, um ein Auth-Verzeichnis auf dem Host (mit den autorisierten Schlüsseln) für den Container freizugeben und dann den SSH-Port zu öffnen, auf den über Port 7001 auf dem Host zugegriffen werden kann.
Möglicherweise möchten Sie sich https://github.com/jpetazzo/nsenter ansehen. Dies scheint eine weitere Möglichkeit zu sein, eine Shell in einem Container zu öffnen und Befehle in einem Container auszuführen.
quelle
Zugegeben, zu spät zur Party, wie wäre es damit, wenn die Schlüssel Ihres Host-Betriebssystems im laufenden Betrieb zum Rooten im Container verfügbar werden:
Ich bin nicht dafür, Dockerfile zum Installieren von Schlüsseln zu verwenden, da Iterationen Ihres Containers möglicherweise private Schlüssel zurücklassen.
quelle
Ich habe versucht herauszufinden, wie man einem Container Signaturschlüssel hinzufügt, um sie zur Laufzeit zu verwenden (nicht zu erstellen), und bin auf diese Frage gestoßen. Docker-Geheimnisse scheinen die Lösung für meinen Anwendungsfall zu sein, und da es noch niemand erwähnt hat, werde ich es hinzufügen.
quelle
In meinem Fall hatte ich ein Problem mit nodejs und 'npm i' aus einem Remote-Repository. Ich habe behoben, dass 'node' user zu nodejs container und 700 zu ~ / .ssh im container hinzugefügt wurde.
Dockerfile:
run.sh:
docker-compose.yml:
danach hat es angefangen zu funktionieren
quelle
Am einfachsten ist es, ein Launchpad-Konto zu erstellen und Folgendes zu verwenden: ssh-import-id
quelle
ssh-import-id
Es sieht so aus, als würde es nur öffentliche Schlüssel importieren.In einem laufenden Docker-Container können Sie ssh-keygen mit der Option docker -i (interaktiv) ausgeben. Dadurch werden die Eingabeaufforderungen des Containers weitergeleitet, um den Schlüssel im Docker-Container zu erstellen.
quelle
Für debian / root / authorized_keys:
quelle