我正在尝试为angular cli项目编写一个docker文件,但我有一个外部依赖项,它是BitBucket上的私有仓库,所以我需要传递我的ssh密钥。我正在尝试使用--build-arg
现在问题是,它没有将这些密钥添加到ssh-agent并要求输入密码。
我正在使用此命令运行
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)" .
这是我的泊坞文件
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
如果我运行上面提到的命令,这是输出。
答案 0 :(得分:1)
已经完成此操作,我的密钥现在是免费密码,但它仍在询问
然后......如果你没有与你的私钥相关联的密码,你应该摆脱Dockerfile行:
# check if ssh agent is running or not, if not, run
RUN eval `ssh-agent -s` && ssh-add /ssh/id_rsa
如果您不需要记忆/缓存密码,则不需要ssh代理。
答案 1 :(得分:1)
我花了几天时间研究同一问题。 ssh-keygen -p确保密码短语为空,但我需要在Dockerfile中使用ssh-agent和ssh-add才能从私有存储库中提取。我的几个同伴告诉我,他们能够使它起作用。我会复制他们已有的内容,但仍然要求输入密码。最后,我遇到了this issue。在逐行手动输入rsa密钥并看到成功之后,我意识到这是因为我正在构建映像并通过make目标传递密钥,而Makefile会将换行符当作空白处理。最终,只需要更新密钥作为cat的参数的方式即可,以便它以bash的形式运行而不是保留换行符。
这是我的Makefile中的构建命令:
make container:
docker build --rm \
--build-arg ssh_prv_key="$$(cat ~/.ssh/id_rsa)" \
--squash -f Dockerfile -t $(DOCKER_IMAGE) .
我还将注意到我需要包括
echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
也是我的Dockerfile RUN命令之一
答案 2 :(得分:0)
从屏幕截图中,git-ssh客户端不会要求您提供bitbucket密码。您的私钥文件使用密码加密。要使用私钥,ssh将需要密码。
选项是从私钥中删除密码。您可以使用ssh-keygen:
编辑私钥$ ssh-keygen -p
对于ssh-keygen ,