使用密码生成的shh密钥从Docker访问私有仓库

时间:2018-06-26 19:19:23

标签: docker bitbucket

我们在bitbucket中有一个私人仓库,我们试图通过npm访问它,并且能够在本地进行git clone和npm安装。但是,当我们尝试在docker容器中执行相同操作时,抛出了一个错误,提示'Host key verification failed',因此我们必须添加known_hosts(这是允许客户端对服务器进行身份验证的代码),此问题得以解决,然后它引发了另一个错误,说Permission denied (publickey),我们必须添加id_rsaid_rsa.pub键,所以我们要做的是创建了一个文件夹(因为要访问.ssh文件夹,我们需要sudo cmd,我们不想使用的)在具有所有三个键的机器中以及使用bash脚本的docker文件中,我们试图获取这些键并复制到存储库中,然后在运行docker时将其传递给docker(完成后删除ssh键,因为我们不想将密钥保留在存储库中),它仍然抛出错误,提示Permission denied (publickey)。几个令人沮丧的小时后,我们发现这与ssh私钥(id_rsa)密码有关,并且我们重新生成了sshkey,而没有密码,最后我们能够在没有任何问题的情况下运行该应用程序。但是我认为没有密码短语的ssh密钥并不安全。现在我的问题是,是否有任何命令/技巧可以忽略密码提示(用于创建ssh密钥id_rsaid_rsa.pub)?因为我想用密码短语创建密钥,但我想让docker忽略它并进入bitbucket安装我的私有仓库。以下是我们遵循的步骤。

1. generate ssh keys using `ssh-keygen -t rsa -b 4096 -C 
   "your_email@example.com"` 
2. this will prompt for passphrase (optional)
3. if you provide passphrase it will create your sshkyes with encryption
4. else your key will be without encryption
5. create a folder in your local machine (e.g. keys)
6. Use bash script (create a bash file in your repo)  to copy your 
   keys from local folder into a repository folder ( e.g sshkeys) as 
   shown below
      if [[ -f "/keys/id_rsa" ]]; then
        echo "keys exists!"
        cp -r /keys/. sshkeys/
       exit 0
      fi  

7. make sure you have git and ssh installed in your docker if not use 
   below command 

   apt-get install -y git ssh

8. And then in your docker file add the below code to copy sshkeys to
   docker root/.ssh

      RUN mkdir -p ~/.ssh
      ADD sshkeys/. /root/.ssh/
      RUN chmod 600 ~/.ssh/*
9. That's it, these steps are enough to install private repo and run it 
   in docker 

问题::如何避免在docker中输入密码提示并安装存储库?我已经尝试了 stackoverflow github 中建议的大多数选项,但是似乎没有什么可以帮助我跳过docker中的密码提示。

1 个答案:

答案 0 :(得分:0)

您以后总是可以再次删除密钥...但是为什么不先从构建主机克隆存储库呢?

选项1 使用脚本将所需文件克隆或拉到主机:

git clone ssh://git@myhost.com/myrepo.git

然后在您的Dockerfile中:

COPY myrepo /

选项2 生成一个新密钥,并将其分配给具有只读访问权限的用户,然后将此密钥复制到映像中。在主机上:

ssh-keygen -f k1 -t rsa -b 2048 -P ''

然后在Dockerfile中

RUN mkdir /root/.ssh
COPY id_rsa* /root/.ssh/
RUN echo -e "Host: myhost.com\nStrictHostKeyChecking no" >> /etc/ssh/ssh_config
RUN git clone ssh://git@myhost.com/myrepo.git
RUN rm -rf /root/.ssh  # remove the keys from the image

您当然也可以检查

man ssh_config

man ssh

有关更多选项,例如使用主机密钥代替用户密钥,为密钥使用不同的路径和名称,或在命令行上指定它们。

man ssh-keygen

当然。这表明在容器内部,对于一组通用的密钥,您可以执行以下操作:

ssh-keygen -A