Git Docker jenkins容器,主机密钥验证失败
我正在用Vagrant、Ansible和Docker创建CI管道和开发环境。我的目标是用一个命令实现一切自动化,而不需要手动配置。使用单个ansible playbook命令,我应该拥有功能齐全的连续部署管道,所有服务都已停靠 现在问题来了。当我运行官方的Jenkins docker容器并尝试为git配置身份验证时,我得到以下错误Git Docker jenkins容器,主机密钥验证失败,git,jenkins,docker,ssh,configuration,Git,Jenkins,Docker,Ssh,Configuration,我正在用Vagrant、Ansible和Docker创建CI管道和开发环境。我的目标是用一个命令实现一切自动化,而不需要手动配置。使用单个ansible playbook命令,我应该拥有功能齐全的连续部署管道,所有服务都已停靠 现在问题来了。当我运行官方的Jenkins docker容器并尝试为git配置身份验证时,我得到以下错误 主机密钥验证失败 我知道我可以登录到Jenkins容器,手动ssh到git,并在第一次登录时接受主机密钥作为受信任的。但这绝对不是,连接也应该自动处理 当可用的工具是
主机密钥验证失败
我知道我可以登录到Jenkins容器,手动ssh到git,并在第一次登录时接受主机密钥作为受信任的。但这绝对不是,连接也应该自动处理
当可用的工具是docker、ansible和vagrant时,如何配置Jenkins docker容器以信任git服务器?您可以使用模块解决此问题
此模块将主机密钥添加到服务器的~/.ssh/known_hosts
文件中,类似于您所描述的手动步骤
请注意本模块的局限性:
如果要管理大量主机密钥,您会发现该模块更有用
我正在构建类似的东西,我的管道阶段封装在Kubernetes编排的容器中,我能够通过git+ssh无缝地使用ssh代理Jenkins插件inside
hashicorp/terraform:light
基于图像的容器从我的私有bitbucket服务器中获取模块。当我试图从同一个bitbucket服务器通过ansible galaxy
下载我的角色时,我在ansible/ansible runner
图像中遇到了与您相同的问题
我试着用terraform和ssh代理做同样的事情
我的相关管道代码段如下所示:
container('ansible') {
...
sshagent([ssh_key]) {
...
stage('get ansible roles') {
sh 'ansible-galaxy install -r requirements.yaml -p roles/'
...
}
}
}
它失败了,ansible galaxy
实际上很好地隐藏了问题:
+ ansible-galaxy install -r requirements.yaml -p roles/
[WARNING]: - ans_rol_test was NOT installed successfully: - command
/usr/bin/git clone ssh://git@mybitbucketserver.org/project/ans_rol_test.git
ans_rol_test failed in directory /root/.ansible/tmp/ansible-local-
106DvbAa0/tmp09xwe_ (rc=128)
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
在我看到这只是一个普通的git克隆之后,我尝试从管道中克隆一个存储库:
+ /usr/bin/git clone ssh://git@mybitbucketserver.org/project/ans_rol_test.git
Cloning into 'ans_rol_test'...
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
然后我尝试将ssh连接到bitbucket服务器
+ ssh git@mybitbucketserver.org
Pseudo-terminal will not be allocated because stdin is not a terminal.
Host key verification failed.
我意识到,当我通过-oStrictHostKeyChecking=no
进行ssh时,主机密钥无论如何都会被保存,但由于sshd,ssh客户机返回255
,管道失败,因此我在末尾添加了一个| | true
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added 'mybitbucketserver.org,10.5.132.51' (RSA) to the list of known hosts.
shell request failed on channel 0
+ true
在此之后,主机密钥被“验证”,因此git clone ssh://也可以工作,因此ansible galaxy
...
stage('get ansible roles') {
sh 'ssh -oStrictHostKeyChecking=no git@mybitbucketserver.org || true'
sh 'ansible-galaxy install -r requirements.yaml -p roles/'
...
}
...
输出:
+ ssh -oStrictHostKeyChecking=no git@mybitbucketserver.org
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added 'mybitbucketserver.org,10.5.132.51' (RSA) to the list of known hosts.
shell request failed on channel 0
+ true
[Pipeline] sh
+ /usr/bin/git clone ssh://git@mybitbucketserver.org/project/ans_rol_test.git
Cloning into 'ans_rol_test'...
[Pipeline] sh
+ ansible-galaxy install -r requirements.yaml -p roles/
- extracting ans_rol_test to /home/jenkins/agent/workspace/configuration/roles/ans_rol_test
- ans_rol_test (1.0.0) was installed successfully
值得注意的是,使用
"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
无法工作。您是否通过生成ssh密钥对在jenkins容器中设置了任何ssh身份验证方法?如果是这样的话,jenkins容器可以自动连接git服务器,而无需使用密码。此外,主机密钥验证只是一个客户端验证问题,可以通过将git server的主机密钥添加到jenkins用户已知的_hosts文件中来消除。使用ansible配置正在运行的docker容器感觉很矛盾,因为docker容器旨在完整和独立。是否可以在启动容器时使用纯docker命令或ansible docker_容器模块提供密钥?