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

时间:2017-01-03 17:37:24

标签: jenkins ansible jenkins-plugins

我正在尝试使用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).\r\n", "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目录。

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

1 个答案:

答案 0 :(得分:0)

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

在 /etc/ansible/ansible.cfg 中设置“host_key_checking = False”

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