Docker,如何处理SSH密钥,known_hosts和authorized_keys

在docker中,当容器必须与外部系统通信时,如何在一般情况下configurationknown_hosts,authorized_keys和ssh连接的需求?

例如,我正在运行jenkins容器,并尝试从作业中的github签出项目,但连接失败,错误host key verification failed

这可以通过login容器来解决,手动连接到github并在提示时信任主机密钥。 然而,这不是一个合适的解决scheme,因为所有的事情都需要100%自动化(我正在build造CIpipe道,并配有一个可靠的docker工人)。 另一个(笨重的)解决scheme是将正在运行的容器configuration成合理的,但这会使事情变得混乱和难以维护。 jenkins容器甚至没有SSH守护进程,我不知道如何SSH从其他主机的容器。 第三个select是使用我自己的Dockerfile扩展jenkins图像,其中configuration了ssh,但是这将硬编码并将容器locking到这个特定的环境。

那么dockerpipe理(和自动化)与外部系统连接的正确方法是什么?

要信任github.com主机,您可以在启动或构build容器时发出以下命令:

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

这会将github公钥添加到已知的hosts文件中。

这是我如何做,不知道你是否会喜欢这个解决scheme。 我有一个私人的git仓库,其中包含authorized_keys和一个公钥集合。 然后,我使用可以克隆这个存储库,并replaceauthorized_keys:

 - git: repo=my_repo dest=my_local_folder force=yes accept_hostkey=yes - shell: "cp my_local_folder/authorized_keys ~/.ssh/" 

使用accept_hostkey实际上可以让我自动化这个过程(当然我相信源代码)。

试试这个:login主机,然后:

 sudo mkdir /var/jenkins_home/.ssh/ sudo ssh-keyscan -t rsa github.com >> /var/jenkins_home/.ssh/known_hosts 

Jenkins容器将本地位置设置为永久映射,因此,在主机系统中运行此映射将生成所需的结果。

一个解决scheme是使用以下选项将主机的ssh密钥安装到docker中:

 docker run -v /home/<host user>/.ssh:/home/<docker user>/.ssh <image> 

这对于git来说是完美的。

Interesting Posts