git 将私钥添加到docker文件中的ssh-agent

nuypyhwy  于 2023-08-01  发布在  Git
关注(0)|答案(4)|浏览(165)

我正在尝试为angular cli项目编写一个docker文件,但我有一个外部依赖项,它是BitBucket上的私有存储库,因此我需要传递我的ssh密钥。我正在尝试使用--build-arg传递ssh密钥
现在的问题是,它没有将这些密钥添加到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)" .
这是我的docker文件

  1. ARG ssh_prv_key
  2. ARG ssh_pub_key
  3. # Use an official Node runtime as a parent image
  4. FROM node:8.9.4
  5. # Specify working directory in docker container
  6. WORKDIR /app
  7. # Authorize SSH Host
  8. RUN mkdir -p /ssh/
  9. RUN chmod 0700 /ssh
  10. # Add the keys and set permissions
  11. 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
  12. # add bitbucket to known hosts
  13. RUN ssh-keyscan bitbucket.org > /ssh/known_hosts
  14. # Copy SSH key to temp folder to pull new code
  15. # ADD ~/.ssh/id_rsa /tmp/
  16. # RUN ssh-agent /tmp
  17. RUN ls -la /ssh
  18. # check if ssh agent is running or not, if not, run
  19. RUN eval `ssh-agent -s` && ssh-add /ssh/id_rsa
  20. # Copy local files into the containers working directory
  21. COPY package.json /app
  22. # Install dependencies inside container
  23. RUN npm i
  24. # Copy local files into the containers working directory
  25. COPY . /app
  26. # Execute Process
  27. CMD ["npm", "docker:rogers:local"]
  28. # Remove ssh key from temp
  29. # RUN rm /tmp/id_rsa
  30. RUN rm -rf /ssh
  31. # expose port
  32. EXPOSE 4200

字符串
下面是运行上面提到的命令的输出。
x1c 0d1x的数据

0tdrvxhp

0tdrvxhp1#

我花了几天的时间来解决同样的问题。ssh-keygen -p确保密码为空,但我需要在Dockerfile中添加ssh-agent和ssh-add,以便能够从私有仓库中提取。我的几个同龄人告诉我,他们能够使它工作;我会复制他们所拥有的,但仍然会被要求输入密码。最后我遇到了this issue。在逐行手动输入rsa键并看到它成功后,我意识到这是因为我正在构建图像并通过make目标传递键,而Makefile正在将换行符处理为空格。最终,这只是一个更新key如何作为参数cat的问题,以便它作为bash运行,而不是保留换行符。
下面是我的Makefile中的build命令:

  1. make container:
  2. docker build --rm \
  3. --build-arg ssh_prv_key="$$(cat ~/.ssh/id_rsa)" \
  4. --squash -f Dockerfile -t $(DOCKER_IMAGE) .

字符串
我还将注意到我需要包括

  1. echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config


我的一个Dockerfile RUN命令

展开查看全部
uklbhaso

uklbhaso2#

我已经这样做了,我的密钥现在没有密码但它仍然在询问
然后......如果你没有与私钥相关联的密码,你应该删除Dockerfile行:

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

字符串
如果您不需要记住/缓存密码,则不需要ssh代理。

0pizxfdo

0pizxfdo3#

从你的截图中可以看出,git-ssh客户端并没有询问你的bitbucket密码。您的私钥文件使用密码进行加密。要使用私钥,ssh需要密码。
一个选项是从私钥中删除密码。您可以使用ssh-keygen编辑您的私钥:

  1. $ ssh-keygen -p

字符串
Source用于ssh-keygen

0lvr5msh

0lvr5msh4#

其中token.txt是base64编码的

  1. RUN eval "$(ssh-agent -s)" && cat token.txt | base64 -d | ssh-add - > /dev/null

字符串

相关问题