ssh-agent erinnert sich nicht an Identitäten, wenn er in einem Docker-Container in DC / OS ausgeführt wird

8

Ich versuche, einen Dienst mit DC / OS und Docker auszuführen. Ich habe meinen Stack mithilfe der Vorlage für meine Region aus hier erstellt. Ich habe auch die folgende Dockerfile erstellt:

%Vor%

Ich habe ein privates Repository, von dem ich klonen / ziehen möchte, wenn der Andock-Container startet. Deshalb versuche ich den privaten Schlüssel zu ssh-agent hinzuzufügen.

Wenn ich dieses Image als Andock-Container lokal ausführe und den privaten Schlüssel mit der Umgebungsvariable PRIVATE_KEY speise, funktioniert alles einwandfrei. Ich sehe, dass die Identität hinzugefügt wird.

Das Problem, das ich habe, ist, dass, wenn ich versuche, einen Dienst unter DC / OS mit dem Docker-Image auszuführen, die ssh-agent sich nicht an die Identität zu erinnern scheint, die mit dem privaten Schlüssel hinzugefügt wurde.

Ich habe das Fehlerprotokoll von DC / OS überprüft. Es gibt keine Fehler.

Weiß jemand, warum der Andock-Container auf DC / OS anders ausgeführt wird, als wenn er lokal ausgeführt wird?

BEARBEITEN: Ich habe Details der Beschreibung des DC / OS-Dienstes hinzugefügt, falls es hilft:

%Vor%     
siavashk 10.08.2017, 05:13
quelle

2 Antworten

0

Docker Version

Überprüfen Sie, ob Ihre lokale Version von Docker mit der auf den DC / OS-Agenten installierten Version übereinstimmt. Standardmäßig verwenden die DC / OS 1.9.3 AWS CloudFormation-Vorlagen CoreOS 1235.12.0 , die mit Docker 1.12.6 . Es ist möglich, dass sich das Einstiegspunktverhalten seither geändert hat.

Docker Befehl

Überprüfen Sie die Mesos-Task-Logs für die fragliche Marathon-App und sehen Sie, welcher docker run-Befehl ausgeführt wurde. Sie könnten beim Testen lokal etwas andere Argumente übergeben.

Skriptfehler

Wie in einer anderen Antwort erwähnt, weist das von Ihnen bereitgestellte Skript mehrere Fehler auf, die mit dem Fehler zusammenhängen können oder nicht.

  1. echo $PRIVATE_KEY sollte echo "$PRIVATE_KEY" sein, um Zeilenumbrüche zu erhalten. Andernfalls schlägt die Schlüsselentschlüsselung mit Bad passphrase, try again for /root/.ssh/id_rsa: fehl.
  2. expect -c "spawn ssh-add /root/.ssh/id_rsa; expect \"Enter passphrase for /root/.ssh/id_rsa:\" send \"\"; interact " sollte expect -c "spawn ssh-add /root/.ssh/id_rsa; expect \"Enter passphrase for /root/.ssh/id_rsa:\"; send \"\n\"; interact " sein. Es fehlt ein Semikolon und ein Zeilenumbruch. Andernfalls schlägt der expect-Befehl ohne Ausführung fehl.

Dateibasierte Geheimnisse

Enterprise DC / OS 1.10 (ab 1.10.0-rc1) hat eine neue Funktion namens File Based Secrets, die das Einfügen von Dateien (wie id_rsa-Dateien) ermöglicht, ohne ihren Inhalt in die Marathon-App-Definition aufzunehmen und sicher in < a href="https://www.vaultproject.io/"> Vault mit DC / OS Secrets .

Dateibasierte Secrets machen das ssh-add nicht für Sie, aber es sollte es einfacher und sicherer machen, die Datei in den Container zu bekommen.

Mesos Fehler

Mesos 1.2.0 hat auf "Docker --env_file" anstelle von "-e" umgestellt, um Umgebungsvariablen zu übergeben. Dies löst einen Docker env_file-Fehler aus, der Zeilenumbrüche nicht unterstützt. Eine Problemumgehung wurde in Mesos und DC / OS eingeführt , aber das Update ist möglicherweise nicht in der Nebenversion, die Sie verwenden .

Eine manuelle Problemumgehung besteht darin, die rsa_id in Base64 für die Marathon-Definition und zurück in Ihr Einstiegsskript zu konvertieren.

    
KarlKFI 06.09.2017, 01:18
quelle
0

Der Schlüsseldateiinhalt, der über PRIVATE_KEY übergeben wird, enthält ursprünglich Zeilenumbrüche. Nachdem der PRIVATE_KEY variable Inhalt auf ~/.ssh/id_rsa wiedergegeben wurde, sind die Zeilenumbrüche verschwunden. Sie können dieses Problem beheben, indem Sie die Variable $PRIVATE_KEY in doppelte Anführungszeichen setzen.

Ein weiteres Problem tritt auf, wenn der Container ohne angehängtes TTY gestartet wird, typischerweise über die Befehlszeilenparameter -i -t bis docker run . Die Kennwortanforderung schlägt fehl und der ssh-Schlüssel wird dem ssh-agent nicht hinzugefügt. Da der Container in DC / OS ausgeführt wird, ist die Interaktion wahrscheinlich nicht sinnvoll. Daher sollten Sie Ihr Einstiegspunkt-Skript entsprechend ändern. Das erfordert, dass Ihr ssh-Schlüssel passwortlos ist.

Diese geänderte Dockerfile sollte funktionieren:

%Vor%     
gesellix 17.08.2017 22:11
quelle

Tags und Links