Jenkins Ansible插件权限被拒绝(公钥,密码)-无法复制私钥



我正在尝试使用Jenkins-Ansible插件来部署一个项目。我觉得这应该很容易,因为我对詹金斯和安西布尔都很熟悉。但是,我在成功执行Ansible命令时遇到了问题。我认为问题在于证书的使用。我们有一个拥有jenkins执行过程的jenkins用户,我们在部署到的机器上有一个jenkins用户设置。我们使用SSH密钥,我已经将jenkins用户私钥添加到jenkins凭据存储中,并在Ansible配置中选择了那些。但是,当我运行作业时,这是我的输出片段(替换了一些信息)。

[my-job] $ ansible-playbook my-job.yml -i inventories/dev -l 1_2_3_4 -f 1 --private-key /tmp/ssh7229752594712048879.key -u jenkins --diff --vault-password-file ~/.vault-pass
PLAY [tag_ansible_groups_my_job] ***********************
TASK [setup] *******************************************************************
fatal: [1_2_3_4]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).rn", "unreachable": true}
to retry, use: --limit @/data/jenkinsdata/workspace/my-job/my-job.retry
PLAY RECAP *********************************************************************
1_2_3_4              : ok=0    changed=0    unreachable=1    failed=0   
FATAL: command execution failed
hudson.AbortException: Ansible playbook execution failed
at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:227)
at org.jenkinsci.plugins.ansible.AnsiblePlaybookBuilder.perform(AnsiblePlaybookBuilder.java:200)
at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779)
at hudson.model.Build$BuildExecution.build(Build.java:205)
at hudson.model.Build$BuildExecution.doRun(Build.java:162)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534)
at hudson.model.Run.execute(Run.java:1729)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:404)
ERROR: Ansible playbook execution failed
Finished: FAILURE

我已经成功地从Jenkins机器上运行了相同的命令,它运行得很好。唯一的区别是我引用了原始的SSH私钥,而不是复制的临时密钥。为了查看这是否是问题所在,我决定检查复制的临时SSH私钥的内容,并且该文件是空的。我在作业完成执行之前检查了该文件,因为我认为它在作业的整个生命周期内都会保留在那里,并且只有在作业完成后才会删除。为了验证这一点,我从配置中删除了凭据的使用,并添加了直接指向适当密钥的私钥和用户参数,作业成功运行。

[my-job] $ ansible-playbook my-job.yml -i inventories/dev -l 1_2_3_4 -f 1 --private-key ~/.ssh/id_rsa -u jenkins --diff --vault-password-file ~/.vault-pass
PLAY [tag_ansible_groups_my_job] ***********************
TASK [setup] *******************************************************************
ok: [1_2_3_4]

因此,在我看来,Jenkins似乎未能将SSH私钥复制到临时文件中。我尝试过使用其他SSH密钥,但每次都有相同的问题。我尝试在Jenkins凭据存储中指定私钥,而不是指定位置,但这也不起作用。我已经检查了Jenkins日志,没有任何内容可以说明为什么专用SSH密钥无法复制到/tmp目录。

我不希望在附加参数中直接引用密钥,因为这将我限制为只能引用位于该服务器上的密钥。有什么建议吗?

我在Edureka找到了这个解决方案。它对我有效。

设置";host_key_checking=False";在/etc/ansible/assible.cfg 中

https://www.edureka.co/community/42595/not-able-connect-remote-host-via-jenkins-run-ansible-playbook

最新更新