2014-12-16 25 views
10

Używam Docker do kilku moich projektów, gdzie jednym z wymogów jest wygenerowanie kluczy ssh przy użyciu pliku Docker, tak aby po zbudowaniu kontenera wygenerować parę kluczy RSA. Zauważyłem kilka przykładów gdzie generowanie kluczy odbywa się za pośrednictwem pliku .sh, a plik Dockerfile ma właściwość do uruchomienia tego pliku .sh. Czy istnieje sposób, aby zrobić to bezpośrednio w Dockerfile zamiast .shGenerowanie kluczy ssh przy użyciu dockerfile

Obecnie używam następujących w Dockerfile do generowania pary kluczy ssh. Ale to daje mi błąd mówiąc „/ bin/sh ssh-keygen nie znaleziono”

RUN ssh-keygen -q -t rsa -N '' -f /home/docker/.ssh/id_rsa 

będzie naprawdę bardzo pomocne, jeśli ktoś może stanowić drogę do osiągnięcia tego samego.

Dzięki Yash

+0

Dlaczego potrzebujesz ssh ?? – Robert

+0

Witam, mam aplikację internetową, która korzysta z uwierzytelniania klucza SSH z komputera hosta w celu wykonania dowolnej akcji, to właśnie dlatego. – priyank

+0

nazwa narzędzia do generowania kluczy jest nieco myląca. Jest to część otwartego SSH, dlatego. – eliasw

Odpowiedz

17

Problemem jest to, że ssh-keygen nie jest dostępna w danym pojemniku jeszcze. Można to łatwo rozwiązać, na przykład poprzez zainstalowanie pakietu openssl-client na obrazie bazowym ubuntu.

Poniższy Dockerfile właśnie to robi i umieszcza klucz w folderze głównym kontenera

FROM ubuntu:latest 

RUN apt-get -y install openssh-client 
RUN ssh-keygen -q -t rsa -N '' -f /id_rsa 

ALE PRZECZYTAJ TO: Moja silna rada jest, aby nie umieszczać klucze, certyfikaty cokolwiek w systemie plików kontenera na wszystko! Może to prowadzić do silnego zagrożenia bezpieczeństwa, ponieważ w zasadzie każdy, kto uzyska obraz pojemnika, może uwierzytelnić się w usługach, dla których klucz jest ważny; zmusza Cię do obsługi obrazów kontenerów z taką samą ostrożnością, z jaką traktowałbyś klucze kryptograficzne i certyfikaty!

Dlatego zaleca się trzymanie kluczy poza kontenerem. Można to łatwo osiągnąć za pomocą Docker VOLUMES; i po prostu montujesz wolumin trzymający klucze/pojemniki w kontenerze Dockera podczas uruchamiania.

TWORZENIE KEYS zewnątrz pojemnika Poniższy Dockerfile ma zamiast utworzyć klucz po uruchomieniu pojemnik, a to może być wykorzystywane do tworzenia klucza zewnętrznego systemu plików kontenera

FROM ubuntu:latest 
RUN apt-get -y install openssh-client 
CMD ssh-keygen -q -t rsa -N '' -f /keys/id_rsa 

pierwsze, zbudować pojemnik z poleceniem:

docker build -t keygen-container . 

Uruchamianie pojemnika za

docker run -v /tmp/:/keys keygen-container 

utworzy klucz na hoście w/tmp.

+0

Cześć eliasw, Wielkie dzięki :) – priyank

+0

Cześć eliasw, Wielkie dzięki :) czy jest sposób, w jaki mogę go wygenerować poza kontenerem, tak jak w/home dir docker?Próbowałem też powtórzyć coś w/etc/hosts/file z Dockerfile, ale bez powodzenia :(, czy masz pojęcie, jak to osiągnąć? – priyank

+0

W rzeczywistości jest to całkiem proste: 1) Na komputerze głównym , uruchom ssh-keygen, aby utworzyć klucze. Na przykład:/home/docker 2) Użyj opcji -v, aby podłączyć/home/docker do kontenera. Zobacz dokumentację Docker (https://docs.docker.com/userguide/dockervolumes/#volume-def) w tomach, aby uzyskać dokładny opis. – eliasw

1

Odpowiedź jest prawie poprawna powyżej, ale musisz najpierw pobrać apt-get update. Może to było poprawne na poprzednim obrazie ubuntu, ale nie zadziałało dla mnie. Ponadto najpierw usuwam wszystkie pliki id_rsa, które mogą istnieć w katalogu localhost.

Powiązane problemy