【问题标题】:How to access GIT repo with my private key from Dockerfile如何使用我的 Dockerfile 中的私钥访问 GIT 存储库
【发布时间】:2014-12-15 10:58:20
【问题描述】:

我正在尝试在我的 Docker 容器中添加一个私钥,该容器可以访问我的私有 git 存储库。 testing_git 文件位于包含 Dockerfile 的文件夹中。我正在尝试制作一个可以即时提取 git 代码的容器。

这是我的 Dockerfile:

FROM ubuntu:14.04.1
WORKDIR ~/.ssh
RUN apt-get -y install ssh
WORKDIR /var/www/html
Run apt-get -y install git
RUN mkdir ~/.ssh
ADD id_rsa /home/id_rsa
RUN cat /home/id_rsa && mv /home/id_rsa ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa && eval "$(ssh-agent -s)"  && ssh-add ~/.ssh/id_rsa && ssh-add -l && ssh-add -L && echo "Host github.com\n\tIdentityFile ~/.ssh/id_rsa" >> /root/.ssh/config &&  git clone git@github.com:amitbadheka/Learning-Rails

输出:

Step 9 : RUN mkdir ~/.ssh
---> Using cache
---> 38f2824f41d6
Step 10 : ADD id_rsa /home/id_rsa
---> Using cache
---> afae372c6a40
Step 11 : RUN cat /home/id_rsa && mv /home/id_rsa ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa && eval "$(ssh-agent -s)"  && ssh-add ~/.ssh/id_rsa && ssh-add -l && ssh-add -L && echo "Host github.com\n\tIdentityFile ~/.ssh/id_rsa" >> /root/.ssh/config &&  git clone git@github.com:amitbadheka/Learning-Rails.git
---> Running in edd6778a0ae6
-----BEGIN RSA PRIVATE KEY-----
MY PRIVATE KEY
-----END RSA PRIVATE KEY-----
Agent pid 12
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
2048 69:41:88:d2:5f:22:fa:63:92:2b:f9:b8:a4:1e:3c:24 /root/.ssh/id_rsa (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrfPuszAriGJxGd16TVeWBvCt8lj88OlJ0fz5LYd2voWDUDnEmPDpvQUDZKQI+MlFfhPS+KN239XsL4X1+vdyj8xXzcBeUB+DUYW2bxZd0kLsmOPeJ0Htoat12fdjzIC/m+H+j6SkAwL+WrV/vH+tbjNZVrl+zcMvBsZipyrKHmJiwko/cqACRYGRXAAUahnVTfhQGXArqn3ioxNN5r6ZDPdv+xGZY4V9fTbHbDooEHaOz/EFu6xwoBFC2SBID3aKEQgS6C07/iRt1fJ8c8TPPvJt6vLJQ/h5LLsN2WRxDG+V5fCGqWKDdJWoyM+fOuCNOH1XTDka8d+2ZN2v+U1KX /root/.ssh/id_rsa
Cloning into 'Learning-Rails'...
**Host key verification failed.**
**fatal: Could not read from remote repository.**
Please make sure you have the correct access rights and the repository exists.
2014/12/15 18:20:47 The command [/bin/sh -c cat /home/id_rsa && mv /home/id_rsa ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa && eval "$(ssh-agent -s)"  && ssh-add ~/.ssh/id_rsa && ssh-add -l && ssh-add -L && echo "Host github.com\n\tIdentityFile ~/.ssh/id_rsa" >> /root/.ssh/config &&  git clone git@github.com:amitbadheka/Learning-Rails.git] returned a non-zero code: 128

所以当我使用相同的密钥时,我可以访问我的存储库。

谁能告诉我我错过了什么?

【问题讨论】:

  • 请告诉我你不要用那个私钥(id_rsa)做任何事!
  • @qkrijger github 从外观上看,该服务只需要用户名“git”aha

标签: docker dockerfile


【解决方案1】:

错误消息Host key verification failed. 不是在抱怨您的私钥,而是在抱怨 github.com 的主机密钥。您可以这样做来添加 github 主机密钥:

ssh-keyscan -t rsa github.com > ~/.ssh/known_hosts

也许你有你的理由,但一般来说,将 git repo 克隆到镜像中并不是在容器中运行代码的首选方式。相反,将 Dockerfile 放在 repo 的根目录下,并在 Dockerfile 中使用 ADD 命令将源代码包含在容器中。

正如您现在所写的,您的私钥是 Docker 映像的一部分。与您共享图像的任何人也将拥有您的私钥。

【讨论】:

  • 感谢您的建议,我正在尝试使用 docker。我会记住这一点
  • @BenWhaley,您能否详细说明为什么将代码拉入容器内不是首选方式?
  • @EngineerDollery 据我所知,只有当您能够在单层中完成所有这些步骤时,这才是正确的。发布图像后,构建此图像所需的所有层(指向最后一层的指针)都会随它一起发布。因此知道您的 Dockerfile 或检查每一层的人可以获得这些私钥。
  • 为什么我需要手动拉主机密钥,而通常它只会自动添加密钥??
  • 因为第一次通常会提示您确认。之后它是自动的(因为确认会导致更新 knownhosts 文件
猜你喜欢
  • 2019-04-23
  • 2011-05-18
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 2018-04-09
  • 2013-11-02
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多