web-dev-qa-db-fra.com

Ajouter une clé privée à ssh-agent dans le fichier docker

J'essaie d'écrire un fichier docker pour un projet clular angular mais j'ai une dépendance externe qui est un référentiel privé sur BitBucket, donc je dois passer ma clé ssh. J'essaie de passer les clés SSH en utilisant --build-arg

Maintenant, le problème est qu’il n’ajoute pas ces clés à ssh-agent et ne demande que le mot de passe.

J'utilise cette commande pour exécuter docker build -t ng-2-docker/client --build-arg ssh_prv_key="$(cat ~/.ssh/id_rsa)" --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa)" .

et ceci est mon fichier docker

ARG ssh_prv_key
ARG ssh_pub_key

# Use an official Node runtime as a parent image
FROM node:8.9.4

# Specify working directory in docker container
WORKDIR /app

# Authorize SSH Host
RUN mkdir -p /ssh/
RUN chmod 0700 /ssh

# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /ssh/id_rsa && echo "$ssh_pub_key" > /ssh/id_rsa.pub && chmod 600 /ssh/id_rsa && chmod 600 /ssh/id_rsa.pub

# add bitbucket to known hosts
RUN ssh-keyscan bitbucket.org > /ssh/known_hosts

# Copy SSH key to temp folder to pull new code
# ADD ~/.ssh/id_rsa /tmp/
# RUN ssh-agent /tmp
RUN ls -la /ssh

# check if ssh agent is running or not, if not, run
RUN eval `ssh-agent -s` && ssh-add /ssh/id_rsa

# Copy local files into the containers working directory
COPY package.json /app

# Install dependencies inside container
RUN npm i

# Copy local files into the containers working directory
COPY . /app

# Execute Process
CMD ["npm", "docker:rogers:local"]

# Remove ssh key from temp
# RUN rm /tmp/id_rsa
RUN rm -rf /ssh

# expose port
EXPOSE 4200

et voici la sortie si je lance la commande mentionnée ci-dessus.

 enter image description here

6
Usman Tahir

C'est déjà fait, et ma clé est libre de la phrase de passe pour le moment mais ça demande toujours

Alors ... si vous n'avez pas de phrase secrète associée à votre clé privée, vous devriez vous débarrasser des lignes Dockerfile:

# check if ssh agent is running or not, if not, run
RUN eval `ssh-agent -s` && ssh-add /ssh/id_rsa

Vous n'avez pas besoin d'un agent ssh si vous n'avez pas à mémoriser/mettre en cache une phrase secrète.

1
VonC

Sur votre capture d'écran, le client git-ssh ne vous demande pas votre mot de passe bitbucket. Votre fichier de clé privée est crypté avec une phrase secrète. Pour utiliser la clé privée, ssh aura besoin de la phrase secrète.

Une option serait de supprimer la phrase secrète de la clé privée. Vous pouvez éditer votre clé privée avec ssh-keygen:

$ ssh-keygen -p

Source pour ssh-keygen

0
rollstuhlfahrer