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